我正在升级一个Rails 3应用程序到rails 5.1。在Rails-3模型中,我的情况如下
has_one :current_contract, :class_name => 'Contract', :conditions => Proc.new { "contract_vw.country = '#{country_id}'" if country_id }
我想之前的开发人员也是这么做的
我不知道如何将它转换为Rails 5.1
任何帮助都很感激。
发布于 2018-02-21 04:39:53
Rails 4+的方法是编写这样的作用域:
has_one :account, -> (country_id) { where('contract_vw.country = ?', country_id) }, class_name: 'Contract'不过,你已经将if country_id写进了协会,这对我来说确实很奇怪。虽然where('contract_vw.country = ?', country_id) if country_id可能有效,但我可能会将其提取到如下方法中:
def country?
country_id.present?
end然后,只要你需要它:
@model.account if @model.country?发布于 2018-02-21 09:24:56
如果我正确地理解了您的用例,那么您不一定要使用has_one,在这种情况下,我认为不应该使用它,而是使用常规方法。
def current_contract
contracts.where("contract_vw.country = ?", country_id).first if country_id.present?
# or ...
contracts.find_by(country: country_id)
endhttps://stackoverflow.com/questions/48898066
复制相似问题