Как вернуть значение столбца (идентификатор записи) из записи вложенной формы в Rails? - PullRequest
1 голос
/ 20 февраля 2012

У меня есть вложенная форма в приложении Rails 3.1, использующая гем Cocoon.

В дочерней форме у меня есть ссылка, которая при щелчке должна вернуть идентификатор дочернего элемента и передать его функции 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 в родительском контроллере, но как мне указать ее на дочерний идентификатор, а не на родительский идентификатор?

Я уверен, что мне здесь не хватает чего-то простого, но я не вижу, как это сочетается?

Благодарен за любые предложения или ссылки на соответствующую информацию.

Спасибо!

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Я бы предложил сделать что-то вроде: 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

И это работает.

Можете ли вы попробовать адаптировать свой код так, чтобы он был похож.Одна вещь, которую я только что понял, в ваших полях - вам нужно сказать:

<%= f.fields_for :children

, а не:

<%= f.fields_for :child

Предполагая, конечно, что у вас есть отношение один-ко-многимздесь.

0 голосов
/ 20 февраля 2012

Не совсем понимаю, почему вы говорите о @variables в контроллере, если хотите вызвать функцию javascript, но в любом случае ... Я думаю, что вы ищете помощника link_to_function с некоторым кодом вроде:

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

Это твоя проблема?

...