我想在客户端上编写一个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
我还没有能够让范围连接在语法上工作。依赖项的姓氏需要作为参数传递。 感谢。
答案 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。