Rails частичное представление задает значение поля формы

Итак, я новичок в Rails и безуспешно пытаюсь сделать следующее:

У меня есть объект (из моей Active Record), содержащий проект, который содержит n подпроектов, содержащих n задач. Теперь для каждого из них я хочу частичное представление.

Поэтому я визуализирую из проекта представление подпроекта со следующим кодом:

<%= render(:partial => 'subproject', :collection =>  @project.sub_projects) %>

В моем частичном представлении подпроекта под названием _subproject.rhtml (добавление кода в старый добрый проект Rails 1.2.3), поэтому я могу получить доступ к данным следующим образом:

<%= subproject.name %>

Это напечатает имя в порядке, но когда я попытаюсь создать текстовое поле, это не сработает:

<%= text_field 'subproject', 'name' %>

Но это будет:

<%= text_field 'subproject', 'name', :value => subproject.name %>

Что я делаю неправильно?


Изменить: изменен заголовок из-за того, что моя проблема заключается не в передаче значения, а в отображении его в поле формы.


Edit2: по запросу мой код контроллера:

@project = Project.find(params[:id])

person Mark    schedule 19.11.2010    source источник


Ответы (1)


Вы можете написать это:

<%= render(:partial => 'subproject', :collection =>  @project.sub_projects) %>

as

<%= render :partial => @project.sub_projects %>

Это отобразит каждый подпроект с партиалом sub_projects/_sub_project.html.erb. Маленький ярлык.

Этот:

<%= text_field 'subproject', 'name' %>

Говорит создать текстовое поле с именем: subproject[name], но не дает ему значения. Вам нужно передать значение, которое вы хотите установить (код, который работает).

Более идиоматический способ сделать это теперь с помощью form_for:

<% form_for @subproject do |f| %> 
  <%= f.text_field :name %>
<% end %>

Или, если вы используете formtastic (https://github.com/justinfrench/formtastic), что замечательно, вы должны написать:

<% semantic_form_for @subproject do |f| %> 
    <%= f.input :name %>
<% end %> 

Надеюсь, это поможет!

person jonnii    schedule 19.11.2010
comment
спасибо за ваши предложения, я реализовал более приятный код form_for, но значение по-прежнему не устанавливается. Когда я использую код в приведенном выше частичном представлении (тот, который генерирует HTML-код проекта), значение устанавливается. Вы знаете, почему это происходит? - person Mark; 19.11.2010
comment
Мой код представления, который я уже опубликовал, в моем контроллере, насколько мне известно из Ruby, переменная-член используется для хранения значения, а затем используется в представлении. Но когда я пытаюсь отобразить частичное в представлении, мой «подчастичный», похоже, не отображает так, как задокументировано. И я использую Rails v1.2.3 (плюс я совершенно новичок в Ruby (на Rails)).. - person Mark; 22.11.2010
comment
Эй, я понял это, я использую несколько моделей (о которых я не думал, что стоит упоминать ..), поэтому моя проблема заключается в том, чтобы выяснить, как реализовать несколько моделей в одной форме, и я нашел несколько ссылок об этом .. Но спасибо за предоставленную мне информацию о form_for я попал на страницу и понял, что такое мультимодель, и теперь у меня есть более приятный код ;-) - person Mark; 22.11.2010