代码之家  ›  专栏  ›  技术社区  ›  Christoph Schiessl Joeyjoejoejr

如何选择一个单一的模式并坚持这种选择?

  •  2
  • Christoph Schiessl Joeyjoejoejr  · 技术社区  · 16 年前

    我有一个简单的模型叫 Party 使用一个名为 parties

    现在我需要做以下工作:管理员希望每次选择一个参与方进行特殊演示(所选参与方显示在应用程序的起始页上)。最重要的是,一次只能选择一方。

    你将如何解决这个问题?政党模型中的布尔标志?是否将所选内容(参与方id)保存在数据库之外的某个位置?实施一个新的模式,与党有一种关系(对我来说似乎有点过分)?

    5 回复  |  直到 16 年前
        1
  •  3
  •   mwilliams    16 年前

    一个简单的“front_page”属性就足够了,或者像您提到的其他模型,使用has_one关系也可以。

    使用另一个模型将允许您维护更多的信息,比如它应该在头版上保留多长时间(过期日期?),或者它被展示了多少次(假设一个聚会可以被展示两次)。这实际上取决于系统的其他需求。

    http://wiki.rubyonrails.org/rails/pages/TipsAndTricks

    创建单例ActiveRecord对象

    如果你有一张只有一个人的桌子 数据库的编号顺序不带 序列,您可以使用单例 模块随ruby一起提供,如下所示:

    require 'singleton'
    
    class Master < ActiveRecord::Base
      include Singleton
      def initialize(args=nil) super(args) if record = Master.find(:first)    
        self.attributes = record.attributes end end def next_tracking_number increment!
        (:current_tracking_number) current_tracking_number end def 
        self.next_tracking_number instance.next_tracking_number 
      end
    end
    

    更新:

    Google 在Ruby中使用Singleton模式应该会给您带来一些好的资源。 2

        2
  •  2
  •   Milan Novota    16 年前

    我将使用布尔标志并创建嵌套的单例资源(升级),我将在PartiesController本身中实现它( set_promoted_party and get_promoted_party actions ).为此,我将创建两条新路线:

    PUT /parties/promoted/:party_id # to set the promoted party
    GET /parties/promoted/:party_id # to get the promoted_party
    
        3
  •  1
  •   Melvin Ram    16 年前

    为了保持应用程序的RESTful性和简单性,我将添加第二个具有has_one关系的模型。此外,通过这种方式,您可以保存特殊派对的历史记录,并跟踪与特殊派对相关的其他有意义的信息。

        4
  •  0
  •   Darren Greaves    16 年前

    您可以将其作为字段添加到admin表/模型中吗?这将是party表的强制外键?

    *另一个解决方案是数据库触发器,它检查没有其他行是所选的一方,但我倾向于回避这种解决方案。

        5
  •  0
  •   Ryan McGeary    16 年前

    保持简单。放 promoted_party.yml

    --- 
    party_id: 123
    

    完成。如果你以后需要更完整或更美好的关系,那就以后再去实现,而不是现在。