ruby on rails scope连接表

时间:2014-02-18 10:20:50

标签: ruby ruby-on-rails-3.2 scope

我的项目有问题,我想加入2个表(“用户+国家/地区”) 我尝试使用下面的代码,但它没有用,

class User < ActiveRecord::Base

  belongs_to    :country

  scope :ind, joins(:countries).where("countries.name like %india%")
end

当我调用此方法时,我发现错误如下代码:

1.9.3-p484 :016 > user_ind = User.ind
NoMethodError: undefined method `ind' for #<Class:0xaa5ed94>
    from /home/vinra/.rvm/gems/ruby-1.9.3-p484@rails3.2/gems/activerecord-3.2.14/lib/active_record/dynamic_matchers.rb:55:in `method_missing'
    from (irb):16
    from /home/vinra/.rvm/gems/ruby-1.9.3-p484@rails3.2/gems/railties-3.2.14/lib/rails/commands/console.rb:47:in `start'
    from /home/vinra/.rvm/gems/ruby-1.9.3-p484@rails3.2/gems/railties-3.2.14/lib/rails/commands/console.rb:8:in `start'
    from /home/vinra/.rvm/gems/ruby-1.9.3-p484@rails3.2/gems/railties-3.2.14/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

我希望有人可以帮助我, 无论如何,谢谢你

1 个答案:

答案 0 :(得分:7)

正确的语法应该是:

scope :ind, -> { joins(:country).where("countries.name like %india%") }

joins中的名称应该是关联的名称,而不是doc中的表格:

  

Active Record允许您使用定义的关联名称   该模型作为为这些指定JOIN子句的快捷方式   使用连接方法时的关联。

没有可调用对象的范围语法是deprecated

  

弃用警告:在不传递可调用对象的情况下使用#scope是   弃用。例如scope :red, where(color: 'red')应该是   已更改为scope :red, -> { where(color: 'red') }。有   在以前的用法中有许多问题,它使得实现   更复杂和越野车。 (如果您愿意,可以定义一个   名为self.red的类方法。)。