2011-06-30 11 views
2

問題が発生しました。どのようにアプローチするかは完全にわかりません。Rails:1つの特定のオブジェクトのカスタムUIを作成する

私は建築写真を共有するためのアプリを持っています。ユーザーhave_many写真、およびユーザーはまたhave_many写真コレクションを作成することができます。

私は業界でも有名な1人の顧客を抱えていて、私と一緒に「普通の」コレクションとはまったく異なるルックアンドフィールで完全にカスタマイズされたコレクションを作成したいと考えていますが、基本的には同じ機能です。私はこの要求に対応したいと思いますが、どうやってそれを行うのか本当にわかりません。

私は既にCollectionという機種とCollectionsControllerというモデルを持っており、すべてのビューに加えて、できるだけ多くを再利用したいと考えています。たとえば、カスタムコレクションでは、ユーザーが直面している表示を無効にする必要があります。表示ビューですが、ではなく、 admin:編集ビューです。

どのようにこのようなアプローチをしますか?

私は、データベース内の単一のレコードに対して完全にカスタムのUIを作成するための最も効率的なDRYメソッドを理解しようとしています。私はこの分野で多くを見つけることができなかったので、記事/書籍などへのリンクを含む、非常に感謝しています。

答えて

1

ユーザおよび/またはコレクションに関連付けられたビューテンプレートの作成を許可します(コレクションごとに異なるテンプレートを使用する - 多態的な関連付けを使用する場合)カスタムテンプレートが見つからないすべての場合のビュー(一貫性と参照のために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 -%> 
+0

どのようにエンドユーザーのための液体の仕事を使用していますか?自分のテンプレートをデータベースなどに保存していますか?コントローラーはどのテンプレートを使用するのかをどのように知っていますか?私はそれのようなことをしたことがないので、私は本当にかなり失われています。 – Andrew

+0

はい、カスタムテンプレートはデータベースに保存され、デフォルトのビューはファイルシステムに保存されます。 –

+0

私は翌日程度に詳細を提供しようとしています - 私はしばらく前に出かけています。 –

関連する問題