我的项目有问题,我想加入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>'
我希望有人可以帮助我, 无论如何,谢谢你
答案 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
的类方法。)。