为什么新的选择表单会增加


 @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将为您处理连接。

最新更新