Rails使用范围加入Query

时间:2013-09-21 16:32:48

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

我正在开发我的第一个rails项目,我一直试图让我的两个模型一起工作。这是我的模特:

class Ecn < ActiveRecord::Base
  has_many :revisions, :dependent => :destroy
  has_many :drawings, through: :revisions
  accepts_nested_attributes_for :revisions, :reject_if => lambda { |attrs| attrs.all? { |key, value| value.blank? }}, :allow_destroy => true
  belongs_to :user

class Drawing < ActiveRecord::Base
  has_many :revisions

class Revision < ActiveRecord::Base
  belongs_to :drawing, foreign_key: :drawing_number
  belongs_to :ecn

我想要实现的是搜索使用修订版foreign_key:drawing_number的Ecns。当我创建一个Ecn时,我向Ecn添加了多个修订版本,其中包含一个字段:drawing_number,这是绘图的属性。我有一个Ecn搜索表单,它有多个要搜索的字段,其中一个是:drawing_number。我想查询查找包含给定的所有修订:drawing_number,并找到包含这些修订的Ecns。

我的Ecn模型中的范围如下所示:

scope :by_drawing_number, lambda { |drawing_number| Ecn.joins(:drawings).where("drawings.drawing_number LIKE ?",  "%#{drawing_number}%") unless drawing_number.nil? }

此范围不会引发任何错误,但搜索结果为零。

1 个答案:

答案 0 :(得分:1)

以下应该是可能的:

scope :by_drawing_number, lambda { |drawing_number| Revision.where("drawing_number LIKE ?", "%#{drawing_number}%").map(&:ecn)

这将返回一组Ecns。