我想使用grouped_collection_select
,但我的数据行为不同。
我有例如Post
来自comments
。我可以执行Post.find(:id).comments
但不能Comment.find(:id).posts
。 Comment
属于author
,author
属于post
。
我想在评论作者:
中添加一个由我的表单添加的选项= grouped_collection_select(:post, :id, @posts, :comments, :title, :id, :author)
我知道它错了,但我怎么能倒掉呢?目前它给我的回报是
<select name="posts[:id]">
<optgroup label="Post 1 title">
<option value="4536">Soica</option>
<option value="56775">Bob</option>
</optgroup>
<optgroup label="Post 2 title">
<option value="7897" selected="selected">Sandy</option>
<option value="266">Sarah</option>
</optgroup>
</select>
是否有可能欺骗它并通过评论作者过滤它?也许grouped_collection_select
不是最佳解决方案?
答案 0 :(得分:3)
你可以通过将关系声明为:
来简化你的关系和应用class Post < ActiveRecord::Base
belongs_to :author
has_many :comments
end
class Author < ActiveRecord::Base
has_many :posts
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :author
belongs_to :post
end
请注意,在belongs_to
关系中,您需要使用单数形式。所以从评论到帖子你总是会使用:
Comment.find(6).post
不是.posts
。你不太可能想要一个多对多的模型,评论可能属于许多帖子。
根据评论在authors
上撰写查询有点棘手,但是极其可行。
@authors = Author.includes(:comments)
.where(comments: { post_id: 7 })
.order(:name) # or however you want to sort it.
你会像这样创建输入:
grouped_collection_select(
:post,
:id,
@authors,
:comments,
:name,
:id,
:name
)