当form_for使用符号时,fields_for不起作用

我有一个form_for代码

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

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

  

当我将form_for更改为:

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

它只是工作正常。 它输出:

  

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

这是令人沮丧的常见原因。 form_for实际上根据您是将符号还是对象传递给它而表现不同。 如果你传递一个符号,就像这样:

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

然后表单构建器将工作,但它只会设置param值,并在@person存在时加载默认值。 你的parmas hash看起来应该是这样的:

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

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

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