Rails 3 & 4 条件关联语法

Rails 3 & 4 conditional association syntax

嘿,我一直在尝试将 rails 应用程序从 rails 3 升级到 rails 4,我遇到的其中一件事是开发 gem 具有条件 has_one 关联,在语法上适用于两个版本。见下文:

Rails 3 语法:

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

Rails 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 版本上都能工作?

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