Я бы разрешил создание 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 -%>