Rails: редактировать/обновлять запись, заполнять текстовые поля текущими записями поля записи

У меня есть программа, которая хранит информацию о соусах. В основном, когда я перехожу к форме редактирования, я делаю все, что должен делать, идентификатор успешно передается, однако все поля формы остаются пустыми, а не отображают значения, которые уже есть в базе данных. в них.

В моем контроллере:

def edit 
 @sauce = Sauce.find(params[:id])
 @pagetitle = "Edit #{@sauce.name} Sauce"
end

def update
 # Find object using form parameters
 @sauce = Sauce.find(params[:id])
 # Update the object
 if @sauce.update_attributes(params[:page])
   # If update succeeds, redirect to the list action
   flash[:notice] = "Sauce updated."
   redirect_to(:action => 'list')
 else
   # If save fails, redisplay the form so user can fix problems
   render('edit')
 end 

Частичная форма:

<%= error_messages_for(@sauce) %> 
 <table summary="Sauces Form Fields">
  <tr>
   <th><%= f.label(:name,"Sauce Name") %></th>
   <td><%= f.text_field(:name) %></td>
  </tr>
  <tr>
   <th><%= f.label(:description, "Description") %></th>
   <td><%= f.text_area(:description, :size => '40x5') %></td>
  </tr>
  <tr>
   <th><%= f.label(:heat_level, "Heat Level") %></th>
   <td><%= f.select(:heat_level,{ 1 => "1", 2 => "2", 3 => "3", 4 => "4", 5 => "5"}) %></td>
  </tr>
  <tr>
   <th><%= f.label(:pic_url, "Picture URL") %></th>
   <td><%= f.text_field(:pic_url) %></td>
  </tr>
  <tr>
   <th><%= f.label(:title_colour, "Title Colour") %></th>
   <td><%= f.text_field(:title_colour) %></td>
  </tr>
  <tr>
   <th><%= f.label(:description_colour, "Desc Colour") %></th>
   <td><%= f.text_field(:description_colour) %></td>
  </tr>
 </table>

мой edit.html.erb

<%= form_for(:subject, :url => {:action => 'update', :id => @sauce.id}) do |f| %>
<%= render(:partial => "form", :locals => {:f => f}) %>  
<%= submit_tag("Update Subject") %>
<% end %>

Где я ошибаюсь?


person Muhammed Bhikha    schedule 16.11.2012    source источник
comment
Вам нужно передать текущий объект, который вы хотите обновить, в form_for, попробуйте следующее: <%= form_for @sauce do |f| %>   -  person MrYoshiji    schedule 16.11.2012


Ответы (1)


Ошибка form_for(:subject). Если вы хотите, чтобы Rails правильно заполнил форму, вам нужно использовать тот же символ, что и переменная экземпляра, или просто переменную экземпляра. Попробуйте это вместо этого:

<%= form_for(@sauce, :url => {:action => 'update', :id => @sauce.id}) do |f| %>
person Veraticus    schedule 16.11.2012
comment
Ты легенда! Всегда маленькие проблемы! - person Muhammed Bhikha; 16.11.2012