ActiveRecord исключение «метод не найден» для простого отношения «один ко многим» - PullRequest
2 голосов
/ 03 октября 2011

Это очень простая задача, но я не могу найти причину проблемы на всю жизнь.

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

Проблема в следующем:

Когда я пытаюсь вызвать `@ user.list 'любым способом, я получаю следующее исключение (это копируется изконсоль rails):

@user = User.where(:email => "me@gmail.com")
   => [#<User id: 1, email: "me@gmail.com", crypted_password:  "$2a$10$tiLFyiuLGSB.UXElEdaTGerSv6/TZoLL4nVFdCNsv1AW...", salt:  "e6275124385b0ea157875bba281c7ae9e3a9858e", created_at: "2011-10-02 05:59:02", updated_at:  "2011-10-02 05:59:02", remember_me_token: nil, remember_me_token_expires_at: nil>] 
@user.lists
NoMethodError: undefined method `lists' for #<ActiveRecord::Relation:0x007f8b6ca89748>
from /Users/<myaccount>/.rvm/gems/ruby-1.9.2-p290@rails3.1/gems/activerecord-      3.1.0/lib/active_record/relation.rb:459:in `method_missing'
from (irb):4
from /Users/<myaccount>/.rvm/gems/ruby-1.9.2-p290@rails3.1/gems/railties-3.1.0/lib/rails/commands/console.rb:45:in `start'
from /Users/<myaccount>/.rvm/gems/ruby-1.9.2-p290@rails3.1/gems/railties-3.1.0/lib/rails/commands/console.rb:8:in `start'
from /Users/<myaccount>/.rvm/gems/ruby-1.9.2-p290@rails3.1/gems/railties-3.1.0/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

My Code / DB Setup

Настройка проста - у меня есть модель User и модель List.List :belongs_to :user и User has_many :lists.Я добавил user_id в таблицу lists со следующей миграцией:

class AddUserIdForeignKeyToLists < ActiveRecord::Migration
  def change
    add_column :lists, :user_id, :integer
  end
end

Я подтвердил, что поле user_id существует в моей таблице (MySQL).

Моя User модель:

class User < ActiveRecord::Base

  has_many :lists

  authenticates_with_sorcery!

  attr_accessible :email, :password, :password_confirmation

  validates_confirmation_of :password
  validates_presence_of :password, :on => :create
  validates_presence_of :email
  validates_uniqueness_of :email  
end 

... и моя List модель выглядит следующим образом:

class List < ActiveRecord::Base
   belongs_to :user
end

Представление дизайна таблицы из MySQL выглядит следующим образом:

users:

enter image description here

lists: enter image description here

Мне кажется, что может быть проблема в отношениях, но яне могу соединить это.У кого-нибудь есть понимание?Я никогда не сталкивался с какими-либо проблемами, такими как запуск Rails 3.0.X на машине с Linux, но это мой первый набег в Rails 3.1 на OSX, так что я не уверен, что, возможно, я пропустил основное изменение?

Спасибо за любые рекомендации

1 Ответ

5 голосов
/ 03 октября 2011
User.where(...)

возвращает коллекцию объектов User, а не объект User. Вам нужно получить объект User.

@user = User.where(...).first

или, что лучше

@user = User.find_by_email("me@gmail.com")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...