【发布时间】:2016-08-15 02:04:33
【问题描述】:
我正在尝试学习如何在我的 Rails 4 应用程序中编写范围。
我有称为用户、配置文件、项目和潜在用途的模型。这些关联是:
用户
has_one :profile
has_many :potential_uses
简介
belongs_to :user
has_many :projects
项目
belongs_to :profile
has_many :potential_uses
潜在用途
belongs_to :project
belongs_to :user
我的潜在用途表中有以下属性:
:comment
:internal_comments_permitted
:external_comments_permitted
我的潜在用途模型中有以下范围:
scope :internal_comments_permitted, -> where(:internal_comments_permitted => 'true')
scope :external_comments_permitted, -> where(:external_comments_permitted => 'true')
然后我有一个类方法来查找所有第三方 cmets:
def third_party_comments
self.internal_comments_permitted.external_comments_permitted
end
现在,我正在尝试编写一个范围,以从第三方 cmets 组中排除拥有项目所属个人资料的用户所做的任何评论。
我想要一个视图页面,将第三方 cmets 与项目创建者的 cmets 分开显示。
scope :third_party_comments, -> where(:comment.user_id != potential_uses.project.profile.user_id)
我知道上面的说法不对,但我不知道这次尝试有什么问题。
在 Ninigi 的调整中采纳 Hasmukh 的建议:
scope :third_party_comments, ->(potential_uses.project.profile.user_id) { where.not(comments: {user_id: potential_uses.project.profile.user_id} ) }
但这给出了一个错误:
syntax error, unexpected '.', expecting ')'
...ty_comments, ->(potential_uses.project.profile.user_id) { wh...
【问题讨论】:
标签: ruby-on-rails scope