2015-11-25 6 views
0

пожалуйста, мне нужна помощь это рецепт модели:создать действие, HABTM отношение

class Recipe < ActiveRecord::Base 

    mount_uploader :cover, AvatarUploader 
    belongs_to :user 

    has_and_belongs_to_many :ingredients,:join_table => 

"ingredients_recipes" 

    accepts_nested_attributes_for :ingredients 

end 

и это Ингредиент Модель

class Ingredient < ActiveRecord::Base 
    has_and_belongs_to_many :recipes,:join_table => "ingredients_recipes" 
end 

я застрял в действии создания

def create 
    #@ingredient = Ingredient.find(params[:ingredients][:id]) 

    @ingredients = Ingredient.where(:id => params[:recipe][:ingredients]) 
    @recipe = Recipe.new(params.require(:recipe).permit(:name,:instructions,:cover,:user_id,:ingredients)) 
    #params[:ingredients].each_pair do |k,v| 
    @recipe.ingredients << @ingredients 
    #end 
    #@recipe = current_user.recipes.new(params.require(:recipe).permit(:name,:instructions,:cover,:user_id, ingredients: [:id, :title])) 
    @recipe.cover = params[:cover] 
    #@recipe.user_id = current_user.id 
    @recipe.save 
    render 'show', status: 201 
    end 

URL-адрес приходит от Front End (Angularjs) выглядит следующим образом:

{"recipe":{"name":"hdfndhs","instructions":"lsls,dndcj","ingredients":[{"id":2,"title":"oeuf"}]}} 

ответ

0

Я думаю, ваша проблема, вы не можете получить правильный @ingredients.

Пожалуйста, попробуйте этот код, чтобы принести @ingredients:

более
@ingredients = Ingredient.where(:id => params[:recipe][:ingredients].map {|ingredient| ingredient[:id]}) 
+0

одна вещь, я получил 'NoMethodError (неопределенный метод 'ингредиенты' для ноль: NilClass):» после этого, '@recipe.ingredients << @ingredients ' –

+0

Большое спасибо! его решено !! –