0

次のルートが与えられます:

resource :public_profile do
  resources :posts
end

resource :private_profile do
  resources :posts
end

PostsControllerで、どの特異なリソース内にネストされているかをどのように判断できますか?

4

2 に答える 2

0

同じ「ベース」コントローラーPostsControllerから拡張された異なるコントローラーに(ルートで指定することにより)それらをルーティングできます。拡張コントローラーでは、それらを識別します。

元:

resource :public_profile do
  resources :posts, :controller => "public_profile_posts_controller"
end

resource :private_profile do
  resources :posts, :controller => "private_profile_posts_controller"
end

およびコントローラー

class PublicProfilePostsController < PostsController
 before_filter :identify_controller

 def identify_controller
  @nested_resource_of = :public_profile
 end
end

class PrivateProfilePostsController < PostsController
 before_filter :identify_controller

 def identify_controller
  @nested_resource_of = :private_profile
 end
end

その後、変数にアクセスできます

@nested_resource_of

PostsControllerアクションで

于 2012-11-15T00:54:10.667 に答える
0

これを行う1つの方法は、メインを拡張するコントローラーをさらに2つ作成しPostsController

resource :public_profile do
  resources :posts, controller: "PublicPostsController"
end

resource :private_profile do
  resources :posts, controller: "PrivatePostsController"
end

これはさまざまな方法で行うこともできます。たとえば、多分それは理にかなっています

class ProfileController < ApplicationController; end
class PostsController < ApplicationController; end

class Private::ProfileController < ProfileController; end
class Private::PostsController < PostsController; end

class Public::ProfileController < ProfileController; end
class Public::PostsController < PostsController; end

ルーティング付き

resource :public_profile, controller: "Public::ProfileController" do
  resources :posts, controller: "Public::PostsController"
end

resource :private_profile, controller: "Private::ProfileController" do
  resources :posts, controller: "Private::PostsController"
end

これをどのように設定するかに関係なく、実際にはそのネストに固有の別のコントローラー内で実行され、そのネストに固有のロジックに最適な場所を持つことができるため、ネストされているリソースを簡単に「知る」ことができます。一般的なロジックでは、それを親に入れますPostsController


これを行う別の方法は、いいねを追加するbefore_filterことPostsControllerです

before_filter :check_nesting

private
  def check_nesting
    @is_public_profile = params.include?(:public)
  end

のようなルーティングがあります

resource :public_profile, public: true do
  resources :posts, controller: "PublicPostsController"
end

resource :private_profile, private: true do
  resources :posts, controller: "PrivatePostsController"
end

しかし、私はこのアプローチを気にしません。

于 2012-11-15T00:54:32.290 に答える