Rails:为单个特定对象创建一个自定义UI



我遇到了一个问题,我完全不确定如何解决。

我有一个分享建筑照片的应用程序。用户have_many照片,用户可以创建集合,也可以创建have_many照片。

现在,我有一位业内知名客户,他希望与我合作,创建一个完全定制的系列,其外观和感觉与"常规"系列截然不同,但基本上具有相同的功能。我想接受这个请求,但我真的不知道该怎么做

考虑到我已经有了一个正常工作的Collection模型和CollectionsController,再加上所有的视图,我希望尽可能多地重用它们。因此,例如,自定义Collection需要覆盖面向用户的:show视图,但不覆盖admin:edit视图。

你会如何处理这样的事情?

我正在努力理解为数据库中的单个记录创建完全自定义UI的最有效的DRY方法。我非常感谢你的建议,包括文章/书籍的链接等,因为我在这方面找不到太多。

我将允许创建与用户和/或集合关联的Liquid视图模板(如果您想要两者-每个用户的模板和每个集合的变体-使用多态关联(,当然,对于所有找不到自定义模板的情况,也可以返回到默认视图(也使用Liquid构建以保持一致性和参考性(。

编辑以添加建议的详细信息:

任何自定义模板都应该存储在数据库中(我会添加一个测试/预览功能,这样输入自定义模板的用户就有机会在发布之前验证他们的模板(:

# Table name custom_templates
# id               :integer
# templatable_type :string
# templatable_id   :integer
# contents         :text
class CustomTemplate < ActiveRecord::Base
  belongs_to :templatable, :polymorphic => true
end
class User
  has_one :custom_template, :as => :templatable    
end
class Collection
  has_one :custom_template, :as => :templatable
end

在控制器操作中,查找自定义模板:

custom_template   = @collection.custom_template
custom_template ||= @user.custom_template
@custom_template = Liquid::Template.parse(custom_template.contents) if custom_template

在您的视图中,渲染自定义模板或您的默认模板部分:

<% if @custom_template -%>
  <%= @custom_template.render(_hash_of_objects_to_pass_to_liquid_template_) %>
<% else -%>
  <%= render :partial => 'default' %>
<% end -%>

相关内容

  • 没有找到相关文章

最新更新