【发布时间】:2014-01-24 00:53:40
【问题描述】:
我在项目使用 Rails 3 时创建了这个关联。从那时起,我们已经升级到 Rails 4,现在我收到了一个弃用警告。以下代码是 Rails 4 所说的已弃用的示例。
has_one :original_participant,
:through => :original_participation,
:source => :participants,
:conditions => Proc.new {
unless self.respond_to?(:organization_id)
"original_participants_surveys_participants.organization_id = surveys_participants.organization_id"
else
"surveys_participants.organization_id = #{self.organization_id}"
end
}
代码之所以在条件块内有除非条件,是因为 sphinx。当 sphinx 构建它的索引时,它不会有可用的 organization_id。当使用标准的 Active Record 调用时,它将具有 organization_id。因此,无论是否定义了 organization_id,我都需要使其工作。我已经对此进行了一些研究,但到目前为止还没有提出任何解决方案来做到这一点 Rails 4 方式。这在 Rails 4 中仍然可以正常工作,但我再次收到弃用警告。
很长的问题,我如何将其转换为兼容 Rails 4 而又不失去检查组织 ID 是否可用的能力?
这是 rails 给我的实际警告信息
弃用警告:Surveys::Participant.has_one :original_participant 声明中的以下选项已弃用::conditions。请改用范围块。例如:
has_many :spam_comments, conditions: { spam: true }, class_name: 'Comment'
应该改写如下:
has_many :spam_comments, -> { where spam: true }, class_name: 'Comment'
【问题讨论】:
-
你能发布确切的警告信息吗?
-
肯定在问题的最后贴出来。
标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4