ruby-on-rails 使用数组值的多个字段的Rails表单

yjghlzjz  于 2023-03-31  发布在  Ruby
关注(0)|答案(2)|浏览(125)

我有一个模型,它的属性是一个数组。下面是一个例子:

class BlogPost
  def tags
    ["example 1", "example 2"]
  end
end

我希望能够在表单中使用多个字段编辑该数组,但仍将其保留为数组。我知道我的控制器需要接受数组:

def permitted_params
  params.require(:blog_post).permit(tags: [])
end

但是,我不确定如何正确呈现表单字段。这会导致错误的字段名称:

<%= form_with model: @blog_post do |form| %>
  <% @blog_post.tags.each do |tag| %>
    <%= form.text_field "tags[]", value: tag %>
  <% end %>
<% end %>

我哪里做错了?

qyyhg6bp

qyyhg6bp1#

请问可以用tag.object试试吗

<% @todo_array.each do |tag| %>
  <%= form.text_field "tags[]", value: tag.object %>
<% end %>
g9icjywg

g9icjywg2#

name属性不太正确:

<input value="example 1" type="text" name="blog_post[tags[]]">

它应该是:

blog_post[tags][]

以下是我知道的几种方法:

<% form.object.tags.each do |tag| %>
  <%= text_field_tag "blog_post[tags][]", tag %>
<% end %>

<% form.object.tags.each do |tag| %>
  <%= text_field_tag form.field_name("tags", ""), tag %>
<% end %>

<%# NOTE: while this works, and i think would be the perfect solution
  # `multiple` is not a valid attribute for a text field %>
<% form.object.tags.each do |tag| %>
  <%= form.text_field "tags", value: tag, multiple: true %>
<% end %>

<%= form.fields_for :tags do |ff| %>
  <% form.object.tags.each do |tag| %>
    <%= ff.text_field "", value: tag %>
  <% end %>
<% end %>

<%# NOTE: ^ all of these will give you a duplicate `id` %>
<%= form.fields_for :tags do |ff| %>
  <% form.object.tags.each_with_index do |tag, index| %>
    <%= ff.text_field "", value: tag, id: ff.field_id(index) %>
    <%#                               ^
      # NOTE: you can also set `id: nil` to skip it %>
  <% end %>
<% end %>

相关问题