在Rails 3中加入范围

时间:2012-10-26 10:25:30

标签: ruby-on-rails ruby-on-rails-3

我想在客户端上编写一个Rails 3范围来执行以下操作:

select * from clients c, dependents d
where d.last_name like '%ss%' and c.id = d.client_id;

依赖模型:

class Dependent < ActiveRecord::Base
  belongs_to :client
  scope :by_last_name, (lambda do |name| { :conditions => ['last_name LIKE ?', "#{name}%"]} end )

客户端模型:

class Client < ActiveRecord::Base
  has_many :dependents, :dependent => :destroy

我还没有能够让范围连接在语法上工作。依赖项的姓氏需要作为参数传递。 感谢。

2 个答案:

答案 0 :(得分:0)

尝试以下方法:

scope :by_last_name, lambda {|name| where("dependents.last_name like ?", "'%#{name}%'")

答案 1 :(得分:0)

试试这个:

class Client < ActiveRecord::Base
  scope :by_last_name, lambda { |last_name| includes(:dependents).where("dependents.last_name LIKE ?", "#{last_name}%") }

然后致电

Client.by_last_name "last_name"

修改:更改了代码以反映您的问题。 find_by_id(1)与find(1)相同,只是在没有找到任何内容时它不会抛出错误,而是返回nil。