Rails 5 - 如何编写范围

时间:2016-12-17 00:56:25

标签: ruby-on-rails ruby scope

我正在尝试学习如何在Rails 5中编写范围。

我有一个用户模型和一个提案模型。协会是:

用户:

has_many :proposals

提案:

belongs_to :user

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

我在尝试:

scope :proponent,   -> { where(user_id: user.id) }

我已尝试了一百万种变体,但我无法找到有效的。

此特定尝试会出现此错误:

2.3.1p112 :001 > Proposal.proponent
NameError: undefined local variable or method `user' for Proposal (call 'Proposal.connection' to establish a connection):Class

我也尝试过:

scope :proponent, -> { where('proposal.user_id = ?', user.id) }

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

undefined local variable or method `user' for #<Class:0x007fd3600eb038>

我不知道错误信息是指第一次还是第二次写“用户”。在我的尝试是不正确的。我不知道&#34;呼叫&#39; Proposal.connection&#39;装置&#34 ;.

任何人都可以看到我需要做些什么来检查提案表以找到属于特定用户的提案表吗?

1 个答案:

答案 0 :(得分:10)

调用范围时,您需要将JButtonActionPerformed作为参数传递。您可以这样定义:

user

user_id

这些确实是一回事。

然后调用它:

scope :proponent,   ->(user){ where(user_id: user.id) }

注意这跟说

是一回事
def self.proponent(user)
  where user_id: user.id
end