pur*_*nic 8 ruby-on-rails mongodb mongoid ruby-on-rails-3 ruby-on-rails-3.1
我有一个食谱模型,其中嵌入了成分,使用Mongoid.
class Recipe
include Mongoid::Document
include Mongoid::Timestamps
field :title, :type => String
embeds_many :ingredients
accepts_nested_attributes_for :ingredients, :reject_if => lambda { |a| a[:title].blank? }, :allow_destroy => true
validates :title, :presence => true
end
class Ingredient
include Mongoid::Document
field :name, :type => String
field :quantity, :type => String
embedded_in :recipe, :inverse_of => :ingredients
end
Run Code Online (Sandbox Code Playgroud)
我希望能够同时创建一个新的配方,以及该配方的相关成分,但我很难理解我将如何做到这一点.这是我到目前为止:
_form.html.erb - 在配方视图中使用
<%= form_for @recipe do |f| %>
...
<li>Title: <%= f.text_field :title %></li>
<% f.fields_for :ingredients do |builder| %>
<%= render "ingredient_fields", :f => builder %>
<% end %>
...
<%= f.submit %>
Run Code Online (Sandbox Code Playgroud)
_ingredient_fields.html.erb
<%= f.text_field :name %>
Run Code Online (Sandbox Code Playgroud)
配方控制器
def new
@recipe = Recipe.new
@ingredient = @recipe.ingredients.build
end
def create
@recipe = Recipe.new(params[:recipe])
if @recipe.save
redirect_to @recipe, notice: 'Recipe was successfully created.'
else
render action: "new"
end
end
Run Code Online (Sandbox Code Playgroud)
成分控制器
def new
@recipe = Recipe.find(params[:recipe_id])
@ingredient = @recipe.ingredients.build
end
def create
@recipe = Recipe.find(params[:recipe_id])
@ingredient = @recipe.ingredients.build(params[:ingredient])
# if @recipe.save
end
Run Code Online (Sandbox Code Playgroud)
这使得新成分形成,但成分没有领域.谁能给我任何关于我做错的指示?
当您显示嵌套表单时,请尝试使用(注意等于):
<%= f.fields_for
Run Code Online (Sandbox Code Playgroud)
而不仅仅是
<% f.fields_for
Run Code Online (Sandbox Code Playgroud)
看到这个类似的问题.
| 归档时间: |
|
| 查看次数: |
5126 次 |
| 最近记录: |