14

私はroutes.rbにこのようなリソースをネストしています-(私のrake:routes gist )

namespace(:admin) do 
  resources :restaurants do
    resources :menus
    resources :menu_items
  end
end

コントローラ内:

def new 
  @restaurant = Restaurant.find(params[:restaurant_id])
  @menu_item =  @restaurant.menu_items.build
end

次のURLで新しいMenuItem(アクション#new)を作成しようとしています:http://127.0.0.1:3001 / admin / restaurants / 1 / menu_items / newエラーが発生します:

NoMethodError in Admin/menu_items#new

Showing /home/fps/workspace3/peded/app/views/admin/menu_items/_form.html.erb where line #1 raised:

undefined method `admin_menu_items_path' for #<#<Class:0xb6582d78>:0xb6581f2c>
Extracted source (around line #1):

1: <%= form_for @menu_item do |f| %>
...

このフォームを機能させるにはどうすればよいですか?それは気の利いた:足場から作成されました

アップデート

私もこれを_formで試しました:

<%= form_for [:restaurant, @menu_item] do |f| %>

しかし、同様のエラーで終了しました:

Showing /home/fps/workspace3/peded/app/views/admin/menu_items/_form.html.erb where line #1 raised:

undefined method `restaurant_admin_menu_items_path' for #<#<Class:0xb68162b0>:0xb6813dd0>
Extracted source (around line #1):

1: <%= form_for [:restaurant, @menu_item] do |f| %

バグを報告する必要がありますか?

4

7 に答える 7

12

form_for([@restaurant, @menu_item])

于 2011-02-09T16:29:27.627 に答える
11

問題は形にあると思います。これは私のために働いた:

<%= form_for(@menu_items, :url => restaurant_menu_items_path(@menu_items.restaurant)) do |f| %>
于 2011-12-08T02:53:39.663 に答える
8

私は同じ問題を抱えています。私が見つけた唯一の解決策は、 に URL を渡すことform_forです。

<% url = (action_name == "new" ? {:action=>"create", :controller=>"admin/menu_item"} : {:action=>"update", :controller=>"admin/menu_item"})%>

<%= form_for [@restaurant ,@menu_item], :url=>url do |f| %>

1 つ追加の注意事項として、 は取得されずparams[:menu_item] back、代わりに が表示されますparams[:admin_menu_item]

それがあなたを助けることを願っています!

于 2011-06-19T04:35:44.977 に答える
2

コマンドラインで実行して、ルートを検索できます。

rake routes

ルートを間違って呼び出しているようです。

配列表記は次のようになります。

form_for([:admin, @restaurant, @menu_item])

作成用の名前付きルート:

admin_restaurant_menu_items_path(@restaurant)
于 2011-02-07T22:58:47.993 に答える
1

ネストされたリソースと名前空間を扱うのはベトナム(ピタ) です。

これが私の厄介な解決策です:

= form_for @admin_menu_item, 
    :url => (@admin_menu_item.try(:new_record?) ? 
        admin_restaurant_menu_items_path(@admin_restaurant) : 
        admin_menu_item_path(@ admin_menu_item)) do |f|
    ...

お役に立てれば幸いです。

于 2014-09-12T12:52:15.140 に答える
0

私にとって正しく機能した唯一の解決策(新しいリソースと編集リソースの両方)は次のとおりです。

form_for @menu_item, :url => url_for([:admin, @restaurant, @menu_item])
于 2014-05-03T07:53:07.003 に答える
0

私はRails 5を使用しています(それが重要だとは思いません)が、これでうまくいきました:

= simple_form_for [:admin, @restaurant, @menu_item] do |f|

simple_form_forそれがおそらくではないという事実も問題でform_forはありません。

おかしなことに、まったく同じリソース名でアプリを作成しています。

于 2016-08-02T15:55:41.397 に答える