My recipes model is as follows
has_many :quantities
has_many :ingredients, :through => :quantities, :uniq => true
has_many :sizes, :through => :quantities, :uniq => true
And the controller action im trying to refactor
class Admin::QuantitiesController < Admin::AdminController
layout 'admin'
authorize_resource :class => :controller
def create
recipe = Recipe.find(params[:recipe_id])
values = params[:quantity][:ingredient]
@quantities = Quantity.find(values.keys)
@quantities_errors = {}
@quantities.each do |quantity|
if quantity.value != values[quantity.id.to_s]
quantity.value = values[quantity.id.to_s]
if quantity.valid?
quantity.save
else
@quantities_errors[quantity.id] = quantity.errors.messages
end
end
end
unless @quantities_errors
redirect_to edit_admin_recipe_path(recipe), notice: 'Ingredients was successfully added.'
else
redirect_to edit_admin_recipe_path(recipe), alert: @quantities_errors
end
end
end
edit_admin_recipe_path
), then why are you getting the POST inQuantitiesController#create
? It should be inRecipesController#update
and use Rails infrastructure (mainlyaccepts_nested_attributes_for
), to remove all this boilerplate. \$\endgroup\$ – tokland Jan 26 '13 at 13:39