0

几周后我将开始一个项目,这是一个网络应用程序,可以为同一家公司的子公司处理多种语言的网站。尽管前端可能看起来不同,但它们都订阅了它下面的相同模型设计。

但主要要求之一是每个子公司可以选择模型的哪些字段将显示在他们的网站上。

例如:有一个Program模型

class Program < AR
  attr_accessible :starting_at, :ending_at, :name, :price, :country
end

因此,如果我有这家公司的两个子公司,即美国和瑞典,它们都使用相同的模型来呈现节目。但是美国分公司想要显示一个包含所有程序的表格,并且每个程序只显示starting_at、和。瑞典分公司也想做同样的事,但不想展示。ending_atnamepriceending_atcountry

此外,他们希望能够通过 Web 界面选择要显示的字段,因为它会随着时间而改变。

所以我的想法是 - 因为有很多元建模正在进行 - 提出一个MetaProgram模型,或者这样,它包含应该显示哪个子公司的哪个字段的信息等。但这会导致动态 SQL 语句ActiveRecord,因为我总是必须选择必须选择哪些字段,然后选择实际数据以通过前端呈现它......

有没有更好的解决方案,或者有一种宝石可以解决这种问题?

PS:抱歉标题含糊

4

1 回答 1

3

我不知道这是否正是您正在寻找的。

我为此使用ActiveRecord::Store。它就像模型的键/值存储。

你有一个这样的表:

create_table do |t|
  t.text :metadata # just a text column, will store serialized hash
end

像这样的模型:

class Program < ActiveRecord::Base     
  store :metadata, :accessors => [:starting_at, :ending_at]

  # validate like normal fields
  validates :starting_at, :presence => true
end

您只需要找到一种方法来根据您在问题中提到的条件动态添加存储访问器哈希。

存储的元数据不能被索引并且您不能在查询中使用它们可能是一个缺点。

我在这里找到了关于这个主题的一个很好的小教程和解释。

于 2013-08-01T21:15:48.600 回答