Ruby on rails 从Rails窗体获取数组

Ruby on rails 从Rails窗体获取数组,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我需要为帐户资源设计一个表单。在这种形式下,我需要在名为relationships的属性中的params散列中收集一些id作为数组 因此POST请求的最后一个参数[account]散列应该如下所示: {:name => 'somename', :relationships => ["123", "23", "23445"]} 如何为字段设计表单_?我试过了,但没有成功: <%= form_for @account do |f| %> <%= f.text_

我需要为
帐户
资源设计一个表单。在这种形式下,我需要在名为
relationships
的属性中的
params
散列中收集一些id作为数组

因此POST请求的最后一个
参数[account]
散列应该如下所示:

{:name => 'somename', :relationships => ["123", "23", "23445"]}
如何为字段设计
表单_?我试过了,但没有成功:

<%= form_for @account do |f| %>
    <%= f.text_field :name %>

    <% @eligible_parents.each do |p| %>
        <%= f.check_box "relationships", nil, :value => p.id  %>
        <b><%= p.name %></b><br/>
      </span>
    <% end %>

    <%= f.submit "Submit" %>
<% end %>

p、 id%>

@qualified_parents
中的元素数量每次都不同

关系
账户
模型中既不是关联,也不是属性

我必须使用虚拟属性,但我需要填写表单中的数组


请帮忙。我该怎么做

您仍然需要视图中的
字段,只需使用
:relationships
作为
记录名称
,然后提供一个对象

<%= form_for @account do |f| %>
    <%= f.text_field :name %>

    <% fields_for :relationships, @eligible_parents do |p| %>
        <%= p.check_box "relationships", nil, :value => p.object.id  %>
        <b><%= p.object.name %></b><br/>
    <% end %>

    <%= f.submit "Submit" %>
<% end %>

p、 object.id%>


此处的文档:

如果要发送值数组,只需在名称属性中使用[]。在您的情况下,只需使用[]

<%= f.check_box "relationships", {}, :value => p.id, :name => "relationships[]"   %>
p.id,:name=>“relationships[]”%>

我发现这是最干净的方式

如果您正在处理直线数据,并且希望在不使用任何这些@objects的情况下发回数组:

<%= form_for :team do |t| %>
  <%= t.fields_for 'people[]', [] do |p| %>
    First Name: <%= p.text_field :first_name %>
    Last Name: <%= p.text_field :last_name %>
  <% end %>
<% end %>

在具有嵌套属性的复杂表单中,可以使用f.object\u name辅助对象。但是在进行插值时要注意语法。这是正确的:

"#{f.object_name}[relationships][]"
这是不正确的:

"#{f.object_name}[relationships[]]"

我总是被它绊倒。

我也在做类似的工作。我的问题是如何将输入名称传递给partial,以使用rails
form\u for
helper将其解析为散列

所以,我的解决方案是这样的:

"team" => {
  "people" => [
    {"first_name" => "Michael", "last_name" => "Jordan"},
    {"first_name" => "Steve", "last_name" => "Jobs"},
    {"first_name" => "Barack", "last_name" => "Obama"}
  ]
}
=render'my\u partial',form:form,name:“item\u id[item.id]”

因此,这将呈现如下html:

"team" => {
  "people" => [
    {"first_name" => "Michael", "last_name" => "Jordan"},
    {"first_name" => "Steve", "last_name" => "Jobs"},
    {"first_name" => "Barack", "last_name" => "Obama"}
  ]
}

数字
1
item.id
,这是HTML理解传递数组或散列的方式,这一切都取决于您的配置

那么,这些情人会是这样的:

"team" => {
  "people" => [
    {"first_name" => "Michael", "last_name" => "Jordan"},
    {"first_name" => "Steve", "last_name" => "Jobs"},
    {"first_name" => "Barack", "last_name" => "Obama"}
  ]
}
“items\u id”=>{“1”=>“1”}


这对我来说是一个
form\u object+virtus

可能的答案/重复:有点不同,但我认为基本技术是一样的。谢谢!我在哪里可以了解更多关于这些的信息!rails指南和流行书籍都没有提到这种特殊用法。我在试图解决我的一个问题时发现了这一点,我最终查看了文档和,我最终找到了这样的小宝石。nil的未定义方法“merge”:NilClass
ip\u address
是我的模型ipresource的属性,它是我以前的代码。。在将其移植到与您的答案类似的格式后,我发现上面的未定义方法“merge”为nil:NilClass
错误。让我们尝试使用一组非活动记录模型来执行此操作,但它不断询问“id”,并给我“undefined method
id
”@dtc您可能正在执行一个.id,它应该是['id']如果您使用的是非活动记录模型