Не могу получить доступ к связанной таблице - PullRequest
0 голосов
/ 16 августа 2011

Я действительно под давлением и совершенно новичок в Rails.Проект рассчитан на два дня.

Я выполнил поиск на консоли Rails для пользователя, введенного в мою базу данных user = user.find(1), и он вернулся.

пользовательские рецепты has_many принадлежат пользователю .... определены в моделях пользователя и рецепта соответственно.

Я получаю сообщение об ошибке.

неопределенный метод "рецепт" для пользователя?

Так я создал своего пользователя

class CreateUsers < ActiveRecord::Migration
  def self.up
     create_table :users do |t|
     t.integer "position"
     t.boolean "visible", :default => false
     t.string "restaurant_name", :limit => 25
     t.string "username", :limit => 25
     t.string "password", :limit => 50
     t.string "hashed_email", :default => "", :null => false
     t.string "address1", :limit => 80
     t.string "address2", :limit => 80
     t.string "address3", :limit => 80
     t.string "county", :limit => 40
     t.string "telephone", :limit => 40
     t.text "web address", :limit => 60
     t.string "photo_path", :limit => 100
     t.text "description", :limit => 2000
     t.text "salt", :string, :limit => 50
      t.timestamps
   end
  end

  def self.down
    drop_table :users
  end
end

Рецепт

    class CreateRecipes < ActiveRecord::Migration
      def self.up
        create_table :recipes do |t|
      t.integer "user_id"
      t.string "recipe_name", :limit => 100
      t.integer "greedy_type", :default => 0
      t.string "photo_path", :limit => 40
      t.text "description", :limit => 400
      t.text "recipe", :limit => 4000
      t.integer "ingredient1", :limit => 40
      t.integer "ingredient2", :limit => 40
      t.integer "ingredient3", :limit => 40
      t.integer "ingredient4", :limit => 40
      t.string "permalink"
      t.integer "position"
      t.boolean "visible", :default => false
      t.timestamps
    end
    add_index("recipes", "user_id")
    add_index("recipes", "permalink")
   end

  def self.down
    drop_table :recipes
  end
 end

users.rb

    class Users < ActiveRecord::Base
        has_many :recipes
    end

recipe.rb

   class Recipes < ActiveRecord::Base
        belongs_to :users
        has_many :restaurants
    end

ОШИБКА

irb(main):005:0> users.recipe
NoMethodError: undefined method `recipe' for #<Users:0x599ebc0>
        from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activemodel-3.0.9/lib/active_model/attribute_methods.rb:
392:in `method_missing'
       from C:/RailsInstaller/Ruby1.8.7/lib/ruby/gems/1.8/gems/activerecord-3.0.9/lib/active_record/attribute_methods.r
b:46:in `method_missing'

Ответы [ 2 ]

7 голосов
/ 16 августа 2011

Если User has_many recipes, почему вы добавляете поле recipe_id для user?Вы должны добавить поле user_id в таблицу классов Recipe.После создания recipe просто сохраните user_id и это все, что вам нужно.Ура!

2 голосов
/ 16 августа 2011

поскольку у пользователя много рецептов,

вы должны написать что-то вроде того, чтобы получить рецепт первого пользователя ..

recipe = user.recipes.first

и сохранить user_id в таблице рецептов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...