我目前有帖子型号,其上有类别:字符串列。我希望显示某些类别的所有帖子。
e.g。点击'技术'类别链接 - 加载所有以apple为类别的帖子。
无法在堆栈溢出上找到任何东西,但我可能正在寻找错误的东西。任何帮助都会很棒并且很感激!
由于
答案 0 :(得分:1)
Post.where(category: 'Animals')
会返回指定类别的所有帖子。
关于问题下的评论 - 是的,你可以从另外的模型Category
中受益,因为帖子可以有更多,而不是一个类别。
您可以将关系定义为以下之一:
HBTM
has_and_belongs_to_many :categories # post.rb
has_and_belongs_to_many :posts # category.rb
has_many through
post.rb
has_many :categories_posts
has_many :categories, through: :categories_posts
category.rb
has_many :categories_posts
has_many :posts, through: :categories_posts
categories_posts.rb
belongs_to :category
belongs_to :post
修改强>
要向表单添加选择类别,请向其添加以下内容(假设Category
具有name
属性):
<%= f.select :categories, Category.pluck(:id, :name), {}, multiple: true %>
另外,请不要忘记在允许的参数(posts_controller.rb
)中将类别列入白名单:
def post_params
params.require(:post).permit(:attr1, :attr2, category_ids: [])
end
答案 1 :(得分:0)
在post.rb模型中,添加scope:
scope :animals, -> { where(category: 'Animals') }
然后在你的控制器中,你可以打电话:
Post.all.animals