использование
В модели: accepts_nested_attributes_for
В контроллере: ничего
В маршрутах: ничего
В представлении, в точке, где вы хотите «вложенные» поля, используйте f.fields_for :other_model do |inner|
, а затем вы можете использовать inner.inner_field_name
. Я думаю, что внутренняя часть будет компонентом в вашем случае, если это то, чем является RecipieIngredient, и вы переименовали его в ингредиент. Если receiveieIngredient на самом деле является более сложной таблицей соединений, переделайте при необходимости.
Подробнее на http://railscasts.com/episodes/196-nested-model-form-part-1
Я бы назвал сущности «получателями» и «ингредиентами», а затем получил бы форму для получателя с fields_for :ingredients do |i|
.
Если вы хотите Ingredient has_many recipies
и Recipie has_many ingredients
, вы можете сделать это тоже с помощью has_many_through
в обеих моделях, указывающих на модель соединения IngredientRecipie
, которая принадлежит получателю и компоненту, но не влияет на форму , Эти отношения используются для извлечения данных.
Обратите внимание, что если у вас есть эти has_many, вы можете использовать simple_form, чтобы просто поддерживать отношения с флажками для отношений и никаким другим кодом для записи, кроме сохранения данных одним сохранением.
Обновление:
Recipie (model)
Recipie has_many :recipie_ingredients
Recipie has many :ingredients, :through => :recipie_ingredients
Ingredient (model)
Recipie has_many :recipie_ingredients
Recipie has many :ingredients, :through => :recipie_ingredients
RecipieIngredient (model)
belongs_to :recipies
belongs_to :ingredients