2011-02-05 26 views
14

Tôi đã lồng nguồn lực như thế này trong routes.rb của tôi - (my rake:routes gist)Rails 3 lồng vấn đề lộ trình tài nguyên như form_for

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

Trong bộ điều khiển:

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

Đang cố gắng để tạo ra một MenuItem mới (action #new), theo url: http://127.0.0.1:3001/admin/restaurants/1/menu_items/new Tôi gặp lỗi:

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| %> 
... 

Ho Tôi có làm cho biểu mẫu này hoạt động không? Nó được tạo ra từ một tiện lợi: giàn giáo

CẬP NHẬT

Tôi cũng đã cố gắng này trong _form:

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

Nhưng kết thúc với một lỗi tương tự:

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| % 

nên Tôi nộp một lỗi?

+2

Bạn đã giải quyết được sự cố này chưa? Tài nguyên lồng nhau trong quản trị không gian tên nên tạo tuyến đường admin_restaurant_admin_menu_items_path nhưng tạo tuyến đường admin_restaurant_menu_items_path. Các: admin namespace đã được đặt trong bộ điều khiển nếu bạn giàn giáo admin/đơn Đây phải là một lỗi trong đường ray? – bandola

+0

@bandola Tôi hỏi/ryanb, và anh ấy đã chỉ ra rằng đó có thể là lỗi nhất –

+0

@FabianoPS: bất kỳ tin tức nào về nó? Vẫn nhận được thông báo lỗi giống như bạn! – Aymeric

Trả lời

11

Tôi nghĩ rằng sự cố xảy ra trong biểu mẫu. Điều này làm việc cho tôi:

<%= form_for(@menu_items, :url => restaurant_menu_items_path(@menu_items.restaurant)) do |f| %> 
+3

Với cách tiếp cận này, tôi nhận được lỗi: Không có tuyến đường phù hợp với {: action => "show",: controller => "menu_items"} –

2

Bạn có thể tra cứu tuyến đường của mình bằng cách chạy trên dòng lệnh.

rake routes 

Có vẻ như bạn đang gọi cho các tuyến đường của mình không chính xác.

mảng ký hiệu sẽ là:

Và đặt tên đường cho tạo:

admin_restaurant_menu_items_path(@restaurant) 
+0

Phương thức đầu tiên, năng suất: 'undefined' admin_admin_restaurant_admin_menu_items_path 'cho # <# : 0xb665a570> ' –

+0

Phương thức thứ hai, năng suất:' undefined 'admin_menu_items_path 'cho # <# : 0xb6863790>' –

12

form_for([@restaurant, @menu_item])

+1

Do tên miền, nó sinh ra: 'phương thức undefined' admin_restaurant_admin_menu_items_path' cho # <# : 0xb6609ecc> 'Vì vậy, tôi chỉ có thể nghĩ là một lỗi –

+0

Cảm ơn, điều này làm việc cho tôi –

+0

Đối với một giải pháp mà không cần sử dụng không gian tên, làm việc! Cảm ơn! – CloudRide

8

Tôi đang gặp vấn đề tương tự. Giải pháp duy nhất tôi tìm thấy là chuyển url đến 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| %> 

Một lưu ý thêm, bạn sẽ không nhận params[:menu_item] back, thay vào đó bạn sẽ thấy params[:admin_menu_item].

Hy vọng sẽ giúp bạn!

+0

điều duy nhất đã giúp tôi, ngay cả khi nó trông xấu xí – atkit

+0

Tuyệt vời! Nó đã lưu ngày của tôi –

0

Giải pháp duy nhất mà làm việc cho tôi một cách chính xác (đối với cả tài nguyên mới và chỉnh sửa) là:

form_for @menu_item, :url => url_for([:admin, @restaurant, @menu_item]) 
1

Đối phó với các nguồn lực lồng nhau và không gian tên là một Việt Nam (pita).

Đây là nasty giải pháp tôi:

= 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| 
    ... 

Tôi hy vọng bạn có thể giúp đỡ.

0

Tôi đang sử dụng Rails 5 (không phải là tôi tưởng tượng nó vấn đề) và điều này đã làm việc cho tôi:

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

Thực tế là nó simple_form_for hơn form_for lẽ không quan trọng nữa.

Vui vẻ đủ, tôi đang tạo ứng dụng có cùng tên tài nguyên chính xác.

Các vấn đề liên quan