2015-09-18 57 views
0

嘿,我一直在試圖升級軌道應用程序從軌道3到軌道4,我遇到麻煩的事情之一是正在研究有條件的has_one關聯的寶石將會在兩個版本中進行語法處理。請看下圖:Rails 3&4條件關聯語法

Rails 3的語法:

has_one :foo, 
    class_name: 'Gem::Foo', foreign_key: :foo_key, primary_key: :bar_key 
    conditions: proc { proc_logic } 

軌道4語法:

has_one :foo, 
    -> { where(proc_logic in where clause) }, 
    class_name: 'Gem::Foo', foreign_key: :foo_key, primary_key: :bar_key 

看來,在一個Rails協會執行conditions的兩種方式是互斥的(不建議使用Rails中4,在Rails 3中不兼容)。有沒有辦法達成妥協,以便代碼可以在兩個rails版本上運行?

+0

Rails 4也使用' - > {}'作爲範圍。例如,用'User'類,你可以創建一個範圍'女性',導致通話'User.female.all ...' – onebree

回答

2

Ruby對這些東西非常靈活。你所要求的可以寫成這樣。

class SomeModel < ActiveRecord::Base 
    if Rails.version >= '4.0.0' 
    has_one :foo, 
     -> { where(proc_logic in where clause) }, 
     class_name: 'Gem::Foo', foreign_key: :foo_key, primary_key: :bar_key 
    else 
    has_one :foo, 
     class_name: 'Gem::Foo', foreign_key: :foo_key, primary_key: :bar_key 
     conditions: proc { proc_logic } 
    end 
end 
+0

謝謝你,我認爲這是我要採取的方法前鋒。它有點醜,但c'est la vie! – aMat

+0

@aMat如果它解決了您的問題,請接受答案... – eirikir

+0

對不起,謝謝! – aMat