#ruby-on-rails #partial-views
#ruby-on-rails #частичные просмотры
Вопрос:
Хорошо, итак, я совсем новичок в Rails и безуспешно пытаюсь выполнить следующее:
У меня есть объект (из моей активной записи), содержащий проект, который содержит 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 %>
Что я делаю не так?
Редактировать: изменен заголовок из-за моей проблемы, заключающейся не в передаче значения, а в отображении его в поле формы.
Редактирование 2: В соответствии с запросом моего кода контроллера:
@project = Project.find(params[:id])
Ответ №1:
Вы можете написать это:
<%= render(:partial => 'subproject', :collection => @project.sub_projects) %>
как
<%= 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 %>
Я надеюсь, что это поможет!
Комментарии:
1. спасибо за ваши предложения, я реализовал более приятный form_for code, но дело в том, что значение по-прежнему не устанавливается. Когда я использую код в приведенном выше частичном представлении (тот, который генерирует html-код проекта), значение устанавливается. Вы знаете, почему это происходит?
2. Мой код представления, который я уже опубликовал, в моем контроллере, насколько мне известно Ruby, переменная-член используется для хранения значения, а затем используется в представлении. Но когда я пытаюсь отобразить partial в представлении, мой ‘sub partial’, похоже, не отображает способ, как задокументировано. И я использую версию Rails версии 2.3.3 (плюс я совсем новичок в Ruby (на Rails))..
3. Эй, я понял это, я использую несколько моделей (о которых я не подумал, что стоит упоминать ..) итак, моя проблема заключается в том, чтобы выяснить, как реализовать несколько моделей в одной форме, и я нашел несколько ссылок об этом.. Но спасибо, что предоставили мне информацию о form_for, которая привела меня на страницу и идею о мультимодели, и теперь у меня тоже есть более приятный код 😉