【问题标题】:Use Rails Model method in Active Query在 Active Query 中使用 Rails Model 方法
【发布时间】:2014-02-02 10:47:15
【问题描述】:

我的一个模型上有一个 orde 字段,那个模型也有一个 is_milestone?根据订单是第 50 个里程碑还是第 100 个里程碑返回 true 或 false 的方法。

我希望选择所有具有里程碑意义的项目,但这可以通过使用 is_milestone 来完成吗?方法?

我目前有:

@milestones = Model.where(:is_milestone?).order('order ASC')

但它不起作用,我认为我的语法错误,但不确定应该如何编写。

有什么想法吗?

【问题讨论】:

    标签: sql ruby-on-rails methods model controller


    【解决方案1】:

    否 - 您不能要求数据库执行需要与您的 Ruby 代码交互的查询。

    您能够使其工作的唯一方法是在您的模型上创建一个is_milestone 属性并将布尔值存储在数据库中。您也许可以使用 after_save 回调填充此值,该回调计算里程碑并将值设置为 true,如果它是第 50 个或第 100 个。

    【讨论】:

    • 对,有道理。改为使用 DB 路线中的新字段。谢谢!
    • 我添加了以下内容,但该字段未在我的数据库中设置。有任何想法吗? after_save 做 |记录| record.is_milestone = true 如果record.is_milestone?结束
    • is_milestone? 是一种方法,rails 将动态添加到您的模型中,因为您将其定义为布尔属性。您应该直接在回调中测试实例,或者创建一个具有唯一名称的新方法来为您执行此测试。
    • 其实是_里程碑?是我在模型上编写的自定义方法。在今天之前,我的数据库中没有名为 is_milestone 的字段
    • 我知道这一点。我建议您将您的方法重命名为其他名称,这样当您调用is_milestone? 时,它将使用动态方法来测试您的模型属性的布尔值,而不是每次都抓取所有实例并计算它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多