2012-04-03 3 views
3

私はいくつかのコントローラで管理名前空間を追加しているので、私たちのものはバックエンドからコンテンツを編集できます。コントローラにデフォルトの名前空間ルートを設定することができます

たとえば、私はBookモデル、ゲストは閲覧できるbooks_controllerモデルを持っています。今、私はadmin/books_controllerを追加し、管理者が書籍を編集するためのバックエンドを提供しています。

namespace :admin do 
    resources :books, except: :show 
    end 
    resources: books, only: [:index, :show] 

現在admin_books_controllerビュー内のすべてのlink_toform_forのために、私はこのような名前空間:adminを追加する必要があります(通常のコントローラーで、それはform_for(@post)だろう)

<%= form_for([:admin, @post]) do |f| %> 

それはちょっと繰り返します、私はadminコントローラのどこかに設定することができますか?コントローラ内のlink_toがすべてadmin名前空間にルーティングされるようにしますか?

+0

これを行う必要がある場合、多分何かがあなたのコードで正しくないです。 – lzap

+0

@lzapが私の質問を更新しました。あなたは精緻化できますか? – lulalala

答えて

1

モデルを名前空間の下に配置すると、自動的にフォームジェネレータに反映されます。

したがって、rails g model admin/bookのようなものは、管理名前空間の下にネストされたブックモデルを生成します。私は、これはあなたが試すことができる方向の何らかの指示を与える願っています

namespace :admin do 
    resources :books 
end 

:あなたは、そのオブジェクトの上のフォームを構築する場合

は、form_for Admin::Book.newこのようなものは、次のような任意の適切なネストされたルートを、対象とすべきです。

よろしくお願いいたします。

+0

ありがとうございますが、私が望むのは、通常のリソースを管理することです。つまり、すでに書籍モデルがあります。別のブックモデルを作成することをお勧めしますか? – lulalala

+0

フォームビルダを拡張して、すべての管理ページでそのフォームビルダーを使用することができますが、フォームURL配列に ':admin'を単に追加するよりも、かなり広範で説明が簡単です:) – Ekampp

+0

ああ。ちょうど何かを考えた。もう1つの方法は、1つの引数(フォームのオブジェクト)をとり、配列 '[:admin、object]'を返すヘルパーメソッド、例えば 'form_url'を作ることです。 – Ekampp

関連する問題