Ruby on rails 在Rails 3中加入范围

Ruby on rails 在Rails 3中加入范围,ruby-on-rails,ruby-on-rails-3,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; scope :by_last_name, lambda {|name| where("dependents.last_name like ?", "'%#{name}%'") 从属模型: class Dependent < ActiveReco

我想在客户端上编写一个Rails 3作用域,以执行以下操作:

select * from clients c, dependents d
where d.last_name like '%ss%' and c.id = d.client_id;
scope :by_last_name, lambda {|name| where("dependents.last_name like ?", "'%#{name}%'")
从属模型:

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
类相关['last_name LIKE?',“#{name}%]”结束)
客户机型号:

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
class客户端:销毁
我还没有能够得到一个作用域联接,以便在语法上工作。依赖项的姓氏需要作为参数传入。 谢谢。

尝试以下方法:

select * from clients c, dependents d
where d.last_name like '%ss%' and c.id = d.client_id;
scope :by_last_name, lambda {|name| where("dependents.last_name like ?", "'%#{name}%'")
试试这个:

class Client < ActiveRecord::Base
  scope :by_last_name, lambda { |last_name| includes(:dependents).where("dependents.last_name LIKE ?", "#{last_name}%") }
编辑:更改代码以反映您的问题。
此外,find_by_id(1)与find(1)相同,只是在未找到任何内容时不会抛出错误,而是返回nil。

Erez,我忘记了一个细节-我需要将依赖者的姓氏作为参数传递。我怎么能把它加到你的答案上呢?埃雷兹,再次感谢你。我遇到的问题是Rails在“where子句”中抱怨未知列“dependents.last_name”:Erez,感谢您在这方面的工作。Novae的答案有效,但我从你的工作中学到了。Novae,谢谢。我需要这是一个客户的范围。我也很好奇id(1)的查找功能。非常感谢Novae。很不错的。工作得很好。