has_many build method, Rails

前端 未结 2 1486
后悔当初
后悔当初 2021-02-19 09:13

Another newbie question.

The goal: each ingredient can have zero or more unit conversions tied to it. I want to put a link to creating a new unit conversion on the page

相关标签:
2条回答
  • 2021-02-19 09:27
    has_many :unit_conversion
    

    Should be pluralized since you're calling it with

    @unit_conversion = @ingredient.unit_conversions.build
    

    your controller

    def new
      @ingredient = Ingredient.all
    

    should be calling #new to setup a new Ingredient or #find to grab an existing Ingredient.

    @ingredient = Ingredient.new       # returns a new Ingredient
    

    or

    @ingredient = Ingredient.find(...) # returns an existing Ingredient
    

    Which one you choose is up to your requirements.

    Also, this is a typo, right?

    belongs_to :Ingredient
    

    You might want to lowercase :ingredient

    0 讨论(0)
  • 2021-02-19 09:42

    Unit Conversion Controller for new and create should be:

    def new
      @ingredient = Ingredient.find(params[:ingredient_id])    
      @unit_conversion = @ingredient.unit_conversions.build
    end
    
    def create
      @ingredient = Ingredient.find(params[:ingredient_id])    
      @unit_conversion = @ingredient.unit_conversions.build(params[:unit_conversion])
    
      if @unit_conversion.save
        flash[:notice] = "Successfully created unit conversion."
        redirect_to ingredient_unit_conversions_url(@ingredient)
      else
        render :action => 'new'
      end
    end
    

    Also, this screencast is a nice resource for nested resources.

    0 讨论(0)
提交回复
热议问题