使用lambda时Rails 3范围关联错误

时间:2013-01-22 16:42:06

标签: mysql ruby-on-rails-3 activerecord lambda scope

因此,尝试在我的scope模型中编写user,我似乎无法让它工作。

我的user模型看起来像这样

class User < ActiveRecord::Base
   has_one :user_profile

   scope :api_user, lambda { |member_code| joins(:users, user_profiles).where('user_profiles.member_code = ?', member_code)}

我的user_profiles模型看起来像这样:

class UserProfile < ActiveRecord::Base
   belongs_to :user

当我在rails控制台中调用scope时,如下所示:

User.api_user(4321)

我收到此错误:

ActiveRecord::ConfigurationError: Association named 'users' was not found; perhaps you misspelled it?

我是范围新手,如果我这样做,我知道如何在没有它们的情况下做到这一点:

User.find_by_id(UserProfile.find_by_member_code(4321).user_id)

它完全返回我想要的内容。但是我需要多次使用它,(写一个api)所以我真的想让scope工作。

已经查看了这些问题herehere,但他们没有对我的问题有所了解。

1 个答案:

答案 0 :(得分:2)

joins只需要列出关联,而不是自己。所以看起来应该是这样的:

scope :api_user, lambda { |member_code| joins(:user_profile).where('user_profiles.member_code = ?', member_code) }