【问题标题】:How to apply this filter in Rails如何在 Rails 中应用此过滤器
【发布时间】:2010-08-04 07:21:30
【问题描述】:

我有一个名为 language 的表,其中有一列名为 lang_code。它具有以下值。

id  lang_code  created_at           updated_at
1   ARA        2010-07-29 15:27:25  NULL
2   CHI        2010-07-29 15:27:25  NULL
3   DAN        2010-07-29 15:27:25  NULL
4   DEU        2010-07-29 15:27:25  NULL
5   ESP        2010-07-29 15:27:25  NULL
6   KOR        2010-07-29 15:27:25  NULL
7   VIE        2010-07-29 15:27:25  NULL

我需要从此表格中删除 3 种语言(CHI、DAN 和 VIE)。我可以简单地编写一个迁移并从表中永久删除这些值。但我不想那样做。相反,我想在模型级别将它们过滤掉,这样我在这个特定模型上所做的任何操作都不应该包含这三种语言。如何在 Rails 中做到这一点?

谢谢

【问题讨论】:

    标签: ruby-on-rails activerecord model filter


    【解决方案1】:

    使用default_scope:

    class Language < ActiveRecord::Base
      UNWANTED_LANGUAGES = ["CHI", "DAN", "VIE"]
      default_scope :conditions => ["lang_code not in (?)", UNWANTED_LANGUAGES]
      ...
    end
    

    【讨论】:

      【解决方案2】:
      1. 您创建了一个迁移,其中添加了一个 :active 列。您设置了一个默认值(EG 默认值处于活动状态)

      2. 在同一个迁移中(小心调用 Language.reset_column_information)或在另一个迁移中,您需要处理与(CHI、DAN、VIE)相关的任何数据库关系。然后,您将它们停用(inactive = true)

      3. 在 Language 类中,您使用 default_scope:

        default_scope :conditions => { :active => true }

      【讨论】:

      • 这样,您可以从管理界面激活/停用语言。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2016-10-27
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多