2013-09-21 67 views
0

我正在開發我的第一個rails項目,我試圖讓我的兩個模型一起工作。這裏是我的模型: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,這是Drawings的一個屬性。我有一個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? } 

此範圍不拋出任何錯誤,但是搜索出現零個結果。

+0

你可以發佈什麼查詢正在執行? –

+0

'修正加載(0.4ms)SELECT「修訂版本」* FROM「修訂」WHERE(drawing_number LIKE'%A9999%') Ecn加載(0.4ms)SELECT「ecns」。* FROM「ecns」WHERE「ecns」。 「id」= 16 LIMIT 1 Ecn Load(0.3ms)SELECT「ecns」。* FROM「ecns」WHERE「ecns」。「id」= 23 LIMIT 1 Ecn Load(0.4ms)SELECT「ecns」。FROM 「ecns」WHERE「ecns」。「ecn_number」= 0' – sabrams

+0

此查詢是使用mattherick在下面發佈的範圍生成的。 – sabrams

回答

1

下面應該是可能的:

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

這將返回電子交易系統的集合。

+0

這仍然不會加載任何Ecns,我在評論中發佈了上面的結果查詢。 – sabrams

+0

你確定,你的db條目是正確的嗎?我在我的一個項目中嘗試了我的查詢,並且有許多關係..並且它可以工作。 – Mattherick

+0

你可能是對的。我不確定我的模型是否正確地相互關聯(例如,我可以創建一個帶有drawing_number的修訂版,該修訂版不存在於圖紙中)。我將不得不做更多的測試才能看到。我不知道在搜索中使用「地圖」方法。它看起來應該起作用。 – sabrams