2015-01-19 1 views
1

У меня есть 2 модели с ассоциацией «один-ко-многим»: пользователь и рецепт. пользовательский класс has_many: recipes, а класс Recipe принадлежит_to: user. Я уже выполнил миграцию, перезагрузил консоль rails и проверил, чтобы user_id был столбцом в таблице рецептов. Тем не менее, я получаю неопределенную ошибку метода, когда я пытаюсь добавить рецепт для пользователя:undefined method with has_many association

2.0.0-p598 :047 > user.recipes << Recipe.first 
NoMethodError: undefined method `recipes' for #<User:0x00000004326fa0> 

здесь код миграции (я уже запустить грабли БД: мигрировать):

class AddUserIdToRecipes < ActiveRecord::Migration 
    def change 
    add_column :recipes, :user_id, :integer 
    end 
end 

Вот код модели пользователя:

class User < ActiveRecord::Base 
    has_one :profile 
    has_many :recipes 
end 

Вот код рецепта модель:

class Recipe < ActiveRecord::Base 
    validates_presence_of :title, :body 

    belongs_to :user 

    def long_title 
    "#{title} - #{published_at}" 
    end 
end 

Почему рецепты по-прежнему отображаются как неопределенный метод?

+0

«Вы пытались выключить и снова включить?» (говоря о вашем сервере Rails) – MrYoshiji

+0

В вашей миграции попробуйте добавить ': user_id,: integer' в другой столбец под рецептами и удалить из столбца рецепт: user_id:: integer. Сбросьте миграцию и снова используйте ее. – Mukul215

+0

спасибо, что сработал (включение и выключение сервера рельсов). Все еще путают то, что сервер рельсов имеет отношение к любому из этого, хотя. Все, что я делаю, это редактирование базы данных, в которой я видел изменения, не загружая сервер rails – roonie

ответ

0

Попробуйте это на вашей консоли:

irb(main):007:0> user = User.new first_name: 'John', last_name: 'Doe' 
=> #<User id: nil, first_name: "John", last_name: "Doe", created_at: nil, updated_at: nil> 
irb(main):008:0> user.save 
    (0.1ms) begin transaction 
    SQL (0.6ms) INSERT INTO "users" ("created_at", "first_name", "last_name", "updated_at") VALUES (?, ?, ?, ?) [["created_at", "2015-01-19 21:14:33.489371"], ["first_name", "John"], ["last_name", "Doe"], ["updated_at", "2015-01-19 21:14:33.489371"]] 
    (0.6ms) commit transaction 
=> true 
irb(main):009:0> r = Recipe.new name: 'oooohh awesome', description: 'my description goes here' 
=> #<Recipe id: nil, name: "oooohh awesome", description: "my description goes here", created_at: nil, updated_at: nil, user_id: nil> 
irb(main):010:0> r.save 
    (0.1ms) begin transaction 
    SQL (0.2ms) INSERT INTO "recipes" ("created_at", "description", "name", "updated_at") VALUES (?, ?, ?, ?) [["created_at", "2015-01-19 21:15:16.548090"], ["description", "my description goes here"], ["name", "oooohh awesome"], ["updated_at", "2015-01-19 21:15:16.548090"]] 
    (1.2ms) commit transaction 
=> true 
irb(main):011:0> user.recipes << Recipe.first 
    Recipe Load (0.2ms) SELECT "recipes".* FROM "recipes" ORDER BY "recipes"."id" ASC LIMIT 1 
    (0.0ms) begin transaction 
    SQL (0.2ms) UPDATE "recipes" SET "updated_at" = ?, "user_id" = ? WHERE "recipes"."id" = 1 [["updated_at", "2015-01-19 21:15:49.181586"], ["user_id", 1]] 
    (1.3ms) commit transaction 
    Recipe Load (0.2ms) SELECT "recipes".* FROM "recipes" WHERE "recipes"."user_id" = ? [["user_id", 1]] 
=> #<ActiveRecord::Associations::CollectionProxy [#<Recipe id: 1, name: "oooohh awesome", description: "sper long deskdk", created_at: "2015-01-19 21:10:24", updated_at: "2015-01-19 21:15:49", user_id: 1>]> 
irb(main):012:0> user.save 
    (0.1ms) begin transaction 
    (0.0ms) commit transaction 
=> true 
irb(main):013:0> user.recipes 
=> #<ActiveRecord::Associations::CollectionProxy [#<Recipe id: 1, name: "oooohh awesome", description: "sper long deskdk", created_at: "2015-01-19 21:10:24", updated_at: "2015-01-19 21:15:49", user_id: 1>]> 
irb(main):014:0> user.recipes.first 
=> #<Recipe id: 1, name: "oooohh awesome", description: "sper long deskdk", created_at: "2015-01-19 21:10:24", updated_at: "2015-01-19 21:15:49", user_id: 1> 
irb(main):015:0> 

вы можете увидеть, что Recipe.first был вставлен в user.recipes и его спасение.

Я сделал две модели, похожие на ваши, и имею точно такую ​​же настройку, как и вы. Вы можете выполнить приведенный выше код, чтобы написать свои контроллеры.

 Смежные вопросы

  • Нет связанных вопросов^_^