Rails - рендеринг части редактирования формы в другой части - PullRequest
1 голос
/ 02 июля 2011

У меня есть таблица, которую я пытаюсь сделать более упорядоченной. На мой взгляд (это представление уже является частичным (_recipe_ingredient.html.erb), у меня есть следующий код, где рендеринг частичного не работает:

<tr>
  <td><%= recipe_ingredient.ingredient.name %></td>
  <td><%= recipe_ingredient.ingredient.weight1*recipe_ingredient.quantity %></td>
  <td><%= recipe_ingredient.ingredient.description1 %></td>
  <td><%= recipe_ingredient.quantity %></td>
  <td><%= render(:partial => 'recipe_ingredients/edit', :locals =>   
    {:recipe_ingredient=> recipe_ingredient}) %></td>
  <td><%= link_to 'Remove', recipe_ingredient, :confirm => 'Remove ingredient from 
    recipe?', :method => :delete %></td>  
</tr>

Ранее я использовал link_to для редактирования recipe_ingredient следующим образом (что работало нормально), но я не хотел бы, чтобы пользователь переходил на другую страницу для редактирования - вместо этого я хочу, чтобы форма была частью таблицы:

<td><%= link_to 'Edit Quantity', edit_recipe_ingredient_path(recipe_ingredient) %></td>

Часть редактирования (которую вызывает новый нерабочий код) выглядит следующим образом:

<h1>Editing recipe_ingredient</h1>
<%= render 'recipe_ingredients/form', :recipe_ingredient => @recipe_ingredient %>

И стандартная форма частичного выглядит так:

<%= form_for(@recipe_ingredient) do |recipe_ingredient| %>
  <% if @recipe_ingredient.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@recipe_ingredient.errors.count, "error") %> prohibited this  
        recipe_ingredient from being saved:</h2>

      <ul>
      <% @recipe_ingredient.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

    <div class="field">
    <%= recipe_ingredient.label :quantity %><br />
    <%= recipe_ingredient.number_field :quantity %>
  </div>
  <div class="actions">
    <%= recipe_ingredient.submit %>
  </div>
<% end %>

Главным образом, я запутался, почему это работает с использованием link_to, но я не могу просто отрендерить частичное. Я получаю ошибку undefined method `model_name' for NilClass:Class в первой строке формы.

Я пытался снять @ @ с @recipe_ingredient в частичной форме, но это тоже не работает.

Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 04 июля 2011

просто создайте объект с @recipe_ingredient в вашем действии, я думаю, что это действие редактирования.

@recipe_ingredient = RecipeIngredient.find_by_id(params[:id)

надеюсь, это будет работать нормально.

...