为has_and_belongs_to_many关系创建表单

时间:2017-04-19 12:19:52

标签: ruby-on-rails activerecord ruby-on-rails-5 has-and-belongs-to-many form-for

我已经阅读了很多关于这个主题的帖子,但实际上并没有提供一个好的答案。 我有一个A级和B级通过has_and_belongs_to_many关系相关联。

class A < ApplicationRecord
  has_and_belongs_to_many :bs
end

class B < ApplicationRecord
  has_and_belongs_to_many :as
end

我需要的是A类的表单,显示一个选择字段,其中包含要选择的所有B实例。此外,在编辑和A的实例时,表单应该显示B的相关实例的列表以及标记它们以便删除的方法。

我尝试通过为每个B实例提供一个带有id的隐藏字段来创建现有实例列表。我使用select_tag创建了一个选择字段。代码看起来像这样:

= form_for @a do |f|
  .field
    = f.label :name
    = f.text_field :name

  .field
    - @a.bs.each_with_index do |b, i|
      = b.name
      = hidden_field_tag "a[b_ids][#{i}]", b.id
  .field
    = select_tag "a[b_ids][]", options_from_collection_for_select(@bs, "id", "name")
  .actions
    = f.submit 'Save'

这在创建A的新实例时效果很好。但是当我尝试编辑它时,似乎有一个问题使执行回归到使用POST而不是PATCH。因为编辑/更新时现在有POST的路由,这明显以异常结束。

所以我想知道是否有任何干净的方法来创建我需要的表单?

0 个答案:

没有答案