这是一项非常基本的任务,但我不能为我的生活找到问题的原因。
我正在做一个附加到用户帐户的基本待办事项列表。我正在使用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>'
我的代码/数据库设置
设置很简单 - 我有一个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
我已经确认我的表(MySQL)中存在字段user_id
。
我的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
:
lists
:
这听起来像是可能存在关系问题,但我似乎无法把它放在一起。有没有人有任何见解?我在Linux机器上运行Rails 3.0.X时从来没有遇到任何麻烦,但这是我第一次涉足OSX上的Rails 3.1,所以我不确定是否可能忽略了潜在的变化?
感谢您提供任何指导
答案 0 :(得分:5)
User.where(...)
返回User对象的集合,而不是User对象。您需要获取User对象。
@user = User.where(...).first
或更好
@user = User.find_by_email("me@gmail.com")