我的食谱和成分有很多种关系。
我在演示文稿中定义了以下命令。
<div>
<%= render :partial => 'ingredients/form',
:locals => {:form => recipe_form} %>
</div>
部分以
开头<%= form_for(@ingredient) do |ingredient_form| %>
但收到了@ingredient nill。 然后我试了
<%= recipe_form.fields_for :ingredients do |builder| %>
<%= render 'ingredient_fields', f: builder %>
<% end %>
我的渲染是
<p class="fields">
<%= f.text_field :name %>
<%= f.hidden_field :_destroy %>
</p>
但没有打印出来。 然后我试了
<% @recipe.ingredients.each do |ingredient| %>
<%= ingredient.name %>
<% end %>
然后才打印所有成分。 在之前的尝试中我做错了什么? 谢谢。
我的配方食谱关系定义如下
class Ingredient < ActiveRecord::Base
has_many :ingredient_recipes
has_many :recipes, :through => :ingredient_recipes
...
class Recipe < ActiveRecord::Base
has_many :ingredient_recipes
has_many :ingredients, :through => :ingredient_recipes
...
accepts_nested_attributes_for :ingredient_recipes ,:reject_if => lambda { |a| a[:content].blank?}
class IngredientRecipe < ActiveRecord::Base
attr_accessible :created_at, :ingredient_id, :order, :recipe_id
belongs_to :recipe
belongs_to :ingredient
end
答案 0 :(得分:1)
您没有准确指定您要执行的操作,因此我假设您有一个显示配方的页面,其中包含许多可以编辑和添加的成分。在你的控制器中你有类似的东西:
class RecipeController < ApplicationController
def edit
@recipe = Recipe.find(params[:id]
end
end
我还假设您正在寻找一个回发到创建操作的表单。因此,我认为你想要一个这样的表格:
<%= form_for @recipe do |form| %>
<%= label_for :name %>
<%= text_field :name %>
<%= form.fields_for :ingredients do |ingredients_fields| %>
<div class="ingredient">
<%= f.text_field :name %>
<%= f.hidden_field :_destroy %>
</div>
<% end %>
<% end %>
此外,更改您的食谱以接受ingredients
的嵌套属性,而不是ingredient_recipes
:
class Recipe < ActiveRecord::Base
has_many :ingredient_recipes
has_many :ingredients, :through => :ingredient_recipes
...
accepts_nested_attributes_for :ingredients, :reject_if => lambda { |a| a[:content].blank?}
最后,为您的内容添加attr_accessible:
class Ingredient < ActiveRecord::Base
attr_accessible :content
...
这对你有用吗?