有条件的belongs_to:仅对已发布标志设置为TRUE的帖子发表评论

发布于 2024-10-18 20:02:59 字数 313 浏览 2 评论 0原文

我只想获取帖子的某些评论:那些已发布的布尔集为 TRUE 的评论。

现在,我只需在 Post show 操作上调用 @post.comments.all 即可。

在 Post.rb 模型中创建一个方法 (published_comments) 对我来说感觉很难看;我感觉这样的代码属于 Comment.rb 模型。但随后我不确定如何从 Post 对象中调用 if 。

此外,我真的很喜欢 belongs_to 为我提供的选项,例如 counter_cache 或预加载。

我应该如何解决这个问题?

I'd like to grab only certain comments for a post: those that have a published boolean set TRUE.

Right now, I simply call a @post.comments.all on the Post show action.

Creating a method (published_comments) in the Post.rb model feels ugly to me; I have the feeling such code belongs in the Comment.rb model. But then I am not sure how to call if from within a Post object.

Moreover, I really like the options that belongs_to offers me, such as the counter_cache or eager loading.

How should I solve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦回旧景 2024-10-25 20:02:59

有很多方法可以处理这种事情。一种选择是将其定义为 Post 模型中 has_many 关联中的条件,但听起来您不喜欢这种方法:

class Post
  has_many :comments, :conditions => { :published => true }
end

另一种选择是设置评论模型中的 default_scope

class Comment
  default_scope where(:published => true)
end

或者,您可以在评论中创建一个范围并调用 @post.comments.published.all

class Comment
  scope :published, where(:published => true)
end

There's a whole bunch of ways to deal with this kind of thing. One option is to define it as a condition in the has_many association in the Post model, but it sounds like you don't like this approach:

class Post
  has_many :comments, :conditions => { :published => true }
end

Another option is to set the default_scope in the Comment model:

class Comment
  default_scope where(:published => true)
end

Or, you could create a scope in comment and call @post.comments.published.all:

class Comment
  scope :published, where(:published => true)
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文