繁体   English   中英

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

[英]fields_for doesnt working when form_for use symbol

我有一个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浏览器。

这是挫败感的普遍根源。 form_for行为实际上取决于您向其传递符号还是对象。 如果将其传递给符号,则如下所示:

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

然后,表单生成器将起作用,但是它将仅设置参数值,并在@person存在的情况下加载默认值。 您的帕尔马哈希看起来应该像这样:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM