我已经阅读了很多关于这个主题的帖子,但实际上并没有提供一个好的答案。
我有一个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
的路由,这明显以异常结束。
所以我想知道是否有任何干净的方法来创建我需要的表单?