我整个下午都在四处寻找尝试找到在Rails中设置用户可修改的应用程序范围设置的主导惯例...到目前为止没有骰子。
我正在开发一个旨在供一个组织使用的简单应用程序,因此不需要用户模型,只有一个管理员。该管理员需要能够修改某些站点范围的首选项,例如徽标,配色方案,标语等。
在Rails 3.1中创建此类应用程序范围设置的最佳实践是什么,并使最终用户可以轻松访问它们?您可以链接到的任何示例应用的奖励积分。
答案 0 :(得分:3)
存储可编辑应用程序范围设置的主要约定似乎是键值存储的概念,由ActiveRecord或其他机制支持。而且,据我所知,根据您的要求,至少有两种很好的策略来存储您的应用程序范围的设置。
如果你想要一个通用的方法,但是非常灵活地定义了一些可以与AR模型相关联的(非)范围设置,你有Rails-Settings(或者它的缓存版本Rails-Settings-Cached) 。我没有尝试在Rails 3.1中使用插件,但它在3.0上运行良好。它允许你有类似的东西:
Settings.main_color = '#3333CC'
Settings.logo_file_name = 'images/logo.png'
Setting['preferences.color'] = :blue
如果你想要一个强大的方法,使用单表继承并允许你像在实际的AR记录中那样在某些设置中执行验证,那么你有一个很好的article,由Jeff Dean编写,引导您完成整个过程。这样,您可以通过将设置分组到子类来设置范围,您可以使用以下内容:
class ApplicationSettings::PageLayout < ApplicationSetting
validates :title, :presence => true
...
def title
value
end
def title=(value)
self.value = value
end
我想通过一些简单的调整,您甚至可以在某些设置中拥有has_many
和belongs_to
关联(例如可变大小的电话号码或电子邮件列表)。
我个人更喜欢后一种方法(当设置是一个大问题时),因为它可以让你更好地控制你存储的设置,并保持你的代码干净和干燥,让你遵循MVC模式。
答案 1 :(得分:0)
我通常在管理部分设置一个带有一些基本脚手架的属性模型 - 然后在必要时调用相关的属性'字段',比如Property.find(:field =&gt;“EARLIEST_DATE:YEAR”),这将有一个用户可设置的值。
属性可能不是数据库表的最佳名称(往往认为保留名称在某处发生冲突的可能性太大) - 但是你明白了。优点是您可以设置范围以访问用户设置的值。