1

Railsのスキャフォールドを使用して、フォームとビューを自動的に生成しました。しかし今、私はルート名前空間のモデルで名前空間化されたコントローラーを使用しなければなりませんでした。

そのため、スキャフォールドを使用せずに手動でコントローラーを生成しました。フォームの操作に問題があります。

次のコードは、名前空間付きコントローラーのフォームを生成する必要があると思います

<%= form_for @menu do |f| %>

  <div class="field">
    <%= f.label :label %><br />
    <%= f.text_field :label %>
  </div>
  <div class="field">
    <%= f.label :order %><br />
    <%= f.text_field :order %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

しかし、そうではありません。それは言う

undefined method `model_name' for NilClass:Class

スキャフォールドジェネレーターを使用してレールを作成するのは非常に簡単なようですが、手動で実行したい場合は、レールヘルパーメソッドがネガティブになります。

form_forドキュメントを検索し、コードを次のように変更しました

<%= form_for @menu, :url => admin_menu_path do |f| %>

次に、別のエラーが表示されます

No route matches {:action=>"show", :controller=>"admin/menus"}

私のレーキルートは次の出力を提供します

     admin_root        /admin(.:format)                admin/menus#index
    admin_menus GET    /admin/menus(.:format)          admin/menus#index
                POST   /admin/menus(.:format)          admin/menus#create
 new_admin_menu GET    /admin/menus/new(.:format)      admin/menus#new
edit_admin_menu GET    /admin/menus/:id/edit(.:format) admin/menus#edit
     admin_menu GET    /admin/menus/:id(.:format)      admin/menus#show
                PUT    /admin/menus/:id(.:format)      admin/menus#update
                DELETE /admin/menus/:id(.:format)      admin/menus#destroy

私が間違っている場合は訂正してください。しかし、rubyはAdmin名前空間でモデルメニューを見つけることができないと思います。これは明らかです。そこで、:: Menu.newを試してみましたが、上位の名前空間で検索されると思いましたが、結果はありませんでした。

4

2 に答える 2

3

コントローラーでインスタンス化するのを忘れている可能性があり@menuます。

「NilClass:Class の未定義メソッド 'model_name'」というメッセージ@menuは、 nil.

Menu インスタンスが必要なため、Railsは が渡されたadmin_menu_pathときに正しくルートを生成できません。nil

コントローラーでインスタンス変数を適切に設定したら、次を使用できます。

form_for [:admin, @menu] do |f| ... end
于 2012-09-19T02:18:38.667 に答える
0

のようなものform_for [:admin, @menu] do |f| ... endが動作するはずです。ここでの同様の質問:名前空間form_forのネストされたリソース

于 2012-09-19T02:02:39.820 に答える