首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 5-如何编写作用域

Rails 5-如何编写作用域
EN

Stack Overflow用户
提问于 2016-12-17 08:56:25
回答 1查看 9.4K关注 0票数 10

我正在尝试学习如何在Rails5中编写作用域。

我有一个用户模型和一个提案模型。这些关联包括:

用户:

代码语言:javascript
复制
has_many :proposals

建议:

代码语言:javascript
复制
belongs_to :user

在我的提案模型中,我试图弄清楚如何编写一个范围来查找属于创建提案的用户的提案。

我正在尝试:

代码语言:javascript
复制
scope :proponent,   -> { where(user_id: user.id) }

我已经尝试了上百万个版本,但是我找不到一个可以工作的。

此特定尝试会产生以下错误:

代码语言:javascript
复制
2.3.1p112 :001 > Proposal.proponent
NameError: undefined local variable or method `user' for Proposal (call 'Proposal.connection' to establish a connection):Class

我也尝试过:

代码语言:javascript
复制
scope :proponent, -> { where('proposal.user_id = ?', user.id) }

我从这次尝试中得到的错误是:

代码语言:javascript
复制
undefined local variable or method `user' for #<Class:0x007fd3600eb038>

我不知道这个错误消息是否意味着我在尝试中第一次还是第二次写“user”是不正确的。我不知道“叫'Proposal.connection‘是什么意思”。

是否有人能看到我需要做些什么才能检查proposals表以查找属于特定用户的proposals表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-17 09:02:12

在调用作用域时,需要将useruser_id作为参数传入。您可以这样定义它:

代码语言:javascript
复制
scope :proponent,   ->(user){ where(user_id: user.id) }

代码语言:javascript
复制
def self.proponent(user)
  where user_id: user.id
end

它们实际上是一回事。

然后叫它:

代码语言:javascript
复制
Proposal.proponent(user)
# => returns a list of proposals for the specific user

请注意,这与说

代码语言:javascript
复制
proposal = Proposal.find_by(...)
proposal.user.proposals
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41194374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档