@post.post_tags.build
以上是帖子控制者(post_tags是帖子和标签之间的中间表(,视图是这样的。
<div class="form-group">
<%= f.fields_for :post_tags do |pt| %>
<%= pt.select :tag_id, @tags.map{|t| [t.name, t.id]}, { :prompt => "choose name", label: "tag" }, class: "tag-fields" %>
<% end %>
</div>
当我编辑帖子时,与帖子相关的标签会正确显示,但还会创建带有"选择名称"的新选择框。我不想要新的选择框,也不知道为什么要创建选择框。
我应该如何解决它?
谢谢眼界
使用间接关系时,不要关注连接模型。活动记录将为您创建它们。
假设您有:
class Post < ApplicationRecord
has_many :tags, through: :taggings
end
class Tag < ApplicationRecord
has_many :posts, through: :taggings
end
class Tagging < ApplicationRecord
belongs_to :tag
belongs_to :post
end
这将让我们通过以下方式标记帖子:
@post.tags < @tag
或者通过以下方式创建标记:
@post.tags.create(name: '#yolo')
如果要创建用户可在其中选择标记的选择标记或复选框,请使用集合帮助程序:
<%= form_for(:post) do |f| %>
<%= f.collection_check_boxes :tag_ids, Tag.all, :id, :name %>
<% end %>
特殊relation_name_ids
设置器可以从 id 数组动态创建/销毁关联。最好的事情是,当您使用HABTM或has_many through:
时,Rails将为您处理连接。