2011-10-19 5 views
2

私は、2組のビューを介して公開し、どのビューが使用されているかによって異なるロジックを実行する単一のモデルを持っています。Ruby on Railsで既存のモデルに2番目のコントローラを追加するにはどうすればよいですか?

例としては、Webインターフェイスを提供するためのコントローラ/ビューセットが1つあり、デスクトップまたはモバイルまたはその他のタイプのインターフェイスを提供するためのコントローラ/ビューセットがあります。

これは、2部構成の質問です:)

1は、それがモデルを共有する複数のコントローラを持っている文体、「大丈夫」となっていますか?

2)既存のモデルに別のコントローラを追加するにはどうすればいいですか?

答えて

3

あなたが1つのまたは2つのアクションが必要な場合は、私は同じコントローラでそれをすべて保つことをお勧めします。過度に複雑なことをする必要はありません。コントローラごとに完全なRESTアクションが必要な場合は、次の例を参考にしてください。

あなたにもグループがあるイベントサイトを実行しているとします。イベントは、グループのコンテキスト内で作成、編集、または完全に単独で行うことができます。それぞれの完全なRESTのアクションを必要とする夫婦のURLを見てみましょう:

/groups/1/events # Lists all events associated with a group 
/events   # Lists all events 

セットアップのルートをこのように:

resources :events 
resources :groups do 
    resources :events, :controller => 'groups/events' 
end 

あなたは今、二つのコントローラを持っています。

class Groups::EventsController < ApplicationController 

あなたが発電機に内蔵され、この使用して、レールを行うことができます:

rails g controller 'groups/events' 
一つは、最後の重要なディテールが第二のコントローラを名前空間にある app/controllers/groups/events_controller.rb

app/controllers/events_controller.rbに住んでいるし、他の

1

確かに違いますが、アクションが1つだけ追加されても技術的にも認知的にも十分に分離されないのはなぜですか。

設定方法はいくつかあります。 routing guideはそれらのすべてを処理します。これはさまざまな要因によって異なります。

1

唯一の懸念事項がビューである場合、特定のコントローラは異なるビューをレンダリングできます。 RoRはRESTfullなので、クライアントが要求したもの(FAT、Mobile、Web)に基づいてコントローラにビューをレンダリングさせることができます。

ロジックが非常に異なる場合は、モデルオブジェクトに別のコントローラを追加することができます。

1

あなたがスマートフォン、タッチパッド、あなたのサイトのより良いフィット感を持っているクライアントウィジェットに応じてCSSを変更したい場合は... sthを読むことをお勧めします。スタイルシートを含めてメディアオプションについて:

http://www.w3.org/TR/CSS2/media.html

関連する問題