关于如何在 ActiveAdmin 中使用 formtastic 创建深度嵌套的表单,我已经有一段时间了。这是我的模型结构的示例:
class Herb < ActiveRecord::Base
has_one :medicinal
attr_accessible :medicinal_attributes
accepts_nested_attributes_for :medicinal
一种药草有一种药用(使用)
class Medicinal < ActiveRecord::Base
attr_accessible :recipe_attributes
belongs_to :herb
has_and_belongs_to_many :recipes
accepts_nested_attributes_for :recipes
一个药用(用途)可以有很多配方
class Recipe < ActiveRecord::Base
has_and_belongs_to_many :medicinals
has_many :recipe_ingredients
has_many :ingredients, :through => :recipe_ingredients
attr_accessible :recipe_ingredients_attributes
accepts_nested_attributes_for :recipe_ingredients
一个食谱可以有很多成分(通过recipe_ingredients)
class RecipeIngredient < ActiveRecord::Base
attr_accessible :ingredient_attributes
belongs_to :recipe
belongs_to :ingredient
成分
class Ingredient < ActiveRecord::Base
attr_accessible :item
has_many :recipes, :through => :recipe_ingredients
所以这是我的问题。我希望用户能够从 ActiveAdmin 中的 Herb Entry 页面创建配方,能够将 Herb 自动输入为成分,并且如果用户输入当前不存在的成分,则将其作为新成分输入(因此其他食谱可以使用它)。我认为我不太了解如何在 ActiveAdmin 中使用控制器来知道从哪里开始......这是我到目前为止所拥有的:
ActiveAdmin.register Herb do
controller do
def new
@herb = Herb.new
@herb.build_medicinal
end
def edit
@herb = Herb.find(params[:id])
if @herb.medicinal.blank?
@herb.build_medicinal
end
end
end
form do |f|
f.inputs "Herb" do
f.inputs :name => "Medicinal", :for => :medicinal do |med|
med.input :content, :label => "Medicinal Uses", :required => true
med.has_many :recipes do |r|
r.inputs "Recipe" do
r.has_many :recipe_ingredients do |i|
i.inputs "Ingredients" do
i.input :ingredient
end
end
end
end
end
end
f.actions
end
我知道这很长,但是您能给我的任何建议将不胜感激。我对rails比较陌生。谢谢!