1

我想知道是否可以放入default_scopeif 块中。我有一个用户模型该has_one配置文件。这是我在用户模型中的代码:

Class User

default_scope joins(:profile).order('profiles.updated_at DESC').readonly(false)

end

问题是,当数据库没有创建配置文件时,它会给出错误,因为配置文件是零。我可以使用 if 块,我可以说:

unless self.profile.nil?
 default_scope joins(:profile).order('profiles.updated_at DESC').readonly(false)
end

这种方法有其他选择吗?

4

2 回答 2

1

虽然我在评论中看到您已经解决了您的问题,但以下是您实际提出的问题的答案,以防其他人遇到此问题并想知道:

从技术上讲,是的,您可以将default_scope呼叫放在一个if块内。但是,该条件将在加载类时default_scope进行测试(以及是否应用)。这意味着您启动应用程序时(或发送请求时,在开发模式下)。您将无法检查该类的特定实例的属性,因为该实例尚不存在。

简短版本: adefault_scope将适用于基于模型的所有查询,或者不适用。

于 2013-03-20T20:46:10.340 回答
0

我很确定你可以做这样的事情:

default_scope lambda {
  unless profile.nil?
    joins(:profile).order('profiles.updated_at DESC').readonly(false)
  end
}

这是spree_landlord 项目的一个示例

于 2013-09-28T06:15:24.560 回答