简单的一对多关系中的ActiveRecord'找不到方法'异常

Eva*_*van 2 ruby activerecord ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

这是一项非常基本的任务,但我不能为我的生活找到问题的原因.

我正在做一个附加到用户帐户的基本待办事项列表.我正在使用Sorcery来帮助进行用户身份验证和创建,这看似很好.

问题是这样的:

当我尝试以任何方式调用`@ 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>'
Run Code Online (Sandbox Code Playgroud)

我的代码/数据库设置

设置很简单 - 我有一个User模型和一个List模型.a List :belongs_to :user和a User has_many :lists.我已通过以下迁移添加user_idlists表中:

class AddUserIdForeignKeyToLists < ActiveRecord::Migration
  def change
    add_column :lists, :user_id, :integer
  end
end
Run Code Online (Sandbox Code Playgroud)

我已经确认该字段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 
Run Code Online (Sandbox Code Playgroud)

......我的List模型看起来像这样:

class List < ActiveRecord::Base
   belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

MySQL的表设计视图如下:

users:

在此输入图像描述

lists: 在此输入图像描述

这听起来像是可能存在关系问题,但我似乎无法把它放在一起.有没有人有任何见解?我在Linux机器上运行Rails 3.0.X时从来没有遇到任何麻烦,但这是我第一次涉足OSX上的Rails 3.1,所以我不确定是否可能忽略了潜在的变化?

谢谢你的指导

Dav*_*hme 5

User.where(...)
Run Code Online (Sandbox Code Playgroud)

返回User对象的集合,而不是User对象.您需要获取User对象.

@user = User.where(...).first
Run Code Online (Sandbox Code Playgroud)

或更好

@user = User.find_by_email("me@gmail.com")
Run Code Online (Sandbox Code Playgroud)