我的应用程序中有四个模型,定义如下
class User < ActiveRecord::Base
has_many :comments
has_many :geographies
has_many :communities, through: :geographies
class Comment < ActiveRecord::Base
belongs_to :user
class Community < ActiveRecord::Base
has_many :geographies
has_many :users
class Geography < ActiveRecord::Base
belongs_to :user
belongs_to :community
用户可以发表评论,这些评论通过地理表与一个或多个社区相关联。
我的任务是仅显示从下拉列表中选择的社区的评论。我从这篇文章comment.user.communities.first
中了解到,我可以通过对象链访问给定评论的社区。
似乎通常带有 lambda 的 named_scope 将是过滤所有评论列表的首选,但是,我完全不知道如何构造这个 named_scope。我试图通过遵循一些 RailsCasts 来构建 named_scope,但这是我所能得到的。生成的错误如下。
class Comment < ActiveRecord::Base
belongs_to :user
def self.community_search(community_id)
if community_id
c = user.communities.first
where('c.id = ?', community_id)
else
scoped
end
end
named_scope :from_community, { |*args| { community_search(args.first) } }
这是错误:
syntax error, unexpected '}', expecting tASSOC
named_scope :from_community, lambda { |*args| { community_search(args.first) } }
^
将带有参数的方法传递到 named_scope 的正确语法是什么?