如何从Rails中的嵌套表单记录返回列值(记录ID)?

问题描述:

我使用Cocoon gem在Rails 3.1应用程序中嵌套了一个窗体。如何从Rails中的嵌套表单记录返回列值(记录ID)?

在子窗体中,我有一个链接,点击后,应该返回子项的id并将其传递给一个javascript函数。

<%= form_for @parent do |f| %> 
    parent fields... 
    <%= f.fields_for :child do |child| %> 
    <%= link "run function", 'string-to-pass' => "#{child.id}" %> 
    child fields... 
    <% end %> 
<% end %> 

从嵌套记录中返回列变量的正确语法是什么?

child.id回报undefined local variable or method "child"

我可以定义在父控制器的@child变量,但我怎么点它向孩子ID,而不是父ID?

我确定我在这里错过了一些简单的东西,但我看不出这是如何融合在一起的?

感谢您提供任何建议或指向相关信息。

谢谢!

我建议做这样的事情:child.object.id

我没有测试过,所以请让我知道如果它的工作原理。

编辑: 我有这样的代码在我看来:

<%= f.fields_for :children do |child| %> 
    <%= render "child_fields", :f => child %> 
<% end %> 

然后在_child_fields.html.erb

<%= f.object.some_attribute %> 
and other view stuff 

而这个工作。

你可以尝试调整你的代码是否类似。有一件事我才意识到,在你fields_for你需要说:

<%= f.fields_for :children 

而不是:

<%= f.fields_for :child 

假设,当然,前提是你有一个一对多的关系会在这里。

+0

谢谢@adnan。这仍然返回'未定义的本地变量或方法“子”' – 2012-02-20 14:14:08

+0

查看编辑我的答案.. – Adnan 2012-02-20 22:58:40

+0

我现在感到愚蠢。我完全忘记了/忽略了:f =>孩子的映射。卫生署!是的'f.object.attribute'现在完美运行。谢谢你,谢谢你,谢谢你。 (fields_for中的child的复数化在写问题时只是一个错误,实际的表单设置正确)。 – 2012-02-21 03:59:59

真的不明白你为什么要谈论的控制器@variables如果你想调用javascript函数,但无论如何... 我认为你正在寻找的助手link_to_function一些代码像:

link_to_function('link', "myJSFunction(#{child.id});"

那是你的问题?

+0

感谢Aledalgrande,感谢您的帮助,但没有那不是我的问题。我没有任何与JavaScript的困难,并不需要调用一个JavaScript,但需要有孩子。ID可用于其他地方。我的问题是,我不能为child.id返回一个值。也许我不了解嵌套表单如何工作。使用上面的语法 - child.id - 我得到'未定义的局部变量或方法“child”' – 2012-02-20 14:47:43