gpt4 book ai didi

ruby-on-rails - Rails 5 - 如何编写作用域

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:11 25 4
gpt4 key购买 nike

我正在尝试学习如何在 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>

我不知道错误消息是否意味着我在尝试中第一次或第二次写“用户”时不正确。我不知道“调用‘Proposal.connection’是什么意思”。

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

最佳答案

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

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

def self.proponent(user)
where user_id: user.id
end

这些其实是一回事。

然后调用它:

Proposal.proponent(user)
# => returns a list of proposals for the specific user

注意这和说是一样的

proposal = Proposal.find_by(...)
proposal.user.proposals

关于ruby-on-rails - Rails 5 - 如何编写作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41194374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com