【问题标题】:fields_for doesnt working when form_for use symbol当 form_for 使用符号时,fields_for 不起作用
【发布时间】:2010-10-29 16:22:36
【问题描述】:

我有一个 form_for 代码

<%form_for :a,:url=>{:controller=>"biz/a",:action=>"save"},:html =>{:multipart => true} do |f| %>
.....
<%f.fields_for :b do |b|%>
.....
<%b.fields_for :apples  do |apple|%>
...
<%end%>
....
<%end%>

它输出没有fields_for函数的html代码

<textarea cols="40" id="a_b_apples_content" name="a[b][apples][content]" rows="20" style="width:500px;height:100px;border:1px #889BAA solid;color:#999;font-size:12px;padding:6px;"></textarea>

当我将 form_for 更改为:

<%form_for @a,:url=>{:controller=>"biz/a",:action=>"save"},:html =>{:multipart => true} do |f| %>

它工作正常。 它输出:

<textarea cols="40" id="a_b_apples_content" name="a[b_attributes][apples_attributes][0][content]" rows="20" style="width:500px;height:100px;border:1px #889BAA solid;color:#999;font-size:12px;padding:6px;"></textarea>

如我所愿。 为什么 form_for 中的符号不​​能正常工作?form_for 中的 :a 和 @a 有什么区别。 谢谢。 我使用 rails 2.3.8 ,ruby 1.8.7,chrome web 浏览器。

【问题讨论】:

  • 不确定,但也许符号只允许属性,而使用对象可以给你关联。

标签: ruby-on-rails form-for fields-for


【解决方案1】:

这是一种常见的挫败感。 form_for 实际上的行为不同,具体取决于您将其传递给符号还是对象。如果你传递一个符号,像这样:

<% form_for :person do |f| %>
  <% f.text_field :name %>
<% end %>

然后表单构建器将工作,但它只会设置参数值,如果@person 存在则加载默认值。你的 parmas 哈希看起来应该是这样的:

params = {
  :person => {
    :name => 'bob'
  }
}

但它不会正确设置您的路线。它将假设您要提交到您已经在同一页面上。现在,如果你给它一个对象,form_for 将为你做更多的事情。它会检查这个对象是新的还是更新的,它会相应地设置表单标签的参数,以及其他一些好处。

老实说,我无法告诉你为什么他们的行为方式不同。符号版本显然仍然可以访问实例变量(上例中的@person),因为字段将填充它们的现有值。简单的解决方案是传递实例变量始终是可行的方法,并且可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    相关资源
    最近更新 更多