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
嘿,我一直在尝试将 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