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

#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, которая привела меня на страницу и идею о мультимодели, и теперь у меня тоже есть более приятный код 😉