2009-04-08 23 views
6

Nếu bạn thêm bản đồ tài nguyên vào không gian tên trong số routes.rb trong Rails 2.3, cách bạn thực hiện link_to (và form_for, v.v.) hiểu rằng nó sẽ nhận được bộ điều khiển không gian tên thay vì một trong không gian tên gốc?Đường ray: Định tuyến chính xác cho các tài nguyên không có tên

Ví dụ ...

Với điều này trong routes.rb:

map.namespace :admin do |admin| 
    admin.resources :opt_in_users 
end 

Và điều này trong giao diện:

<%= link_to @anOptInUser %> 

Đó link_to nên sử dụng link_for_admin_opt_in_user, nhưng thay vào đó nó cố gắng sử dụng link_for_opt_in_user, không thành công.

Trả lời

7

Với nguồn namespaced, như với các nguồn lực lồng nhau, bạn có thể sử dụng một mảng với một biểu tượng:

link_to 'Click here', [:admin, @opt_in_user] 

hoặc

form_for [:admin, @opt_in_user] do |form| .... 
+0

Nó vẫn áp dụng cho Rails 3.1.3. – olistik

2

đường ray tài liệu cho url_for cho biết bạn sẽ phải gọi đây là một cách rõ ràng:

Nếu bạn thay vì một băm vượt qua kỷ lục (như một Active Record hoặc Active Resource) như tham số tùy chọn, bạn sẽ kích hoạt tuyến đường được đặt tên cho bản ghi đó. Việc tra cứu sẽ diễn ra trên tên của lớp học. Vì vậy, việc chuyển đối tượng Hội thảo sẽ cố gắng sử dụng tuyến workshop_path. Nếu bạn có tuyến đường lồng nhau, chẳng hạn như admin_workshop_path, bạn sẽ phải gọi rõ ràng (không thể để url_for đoán tuyến đường đó).

(từ http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#M001564)

+0

Yeah, đó là những gì tôi đã kết thúc làm ... Cảm ơn bạn đã xác nhận đó là cách duy nhất!(mặc dù tôi sẽ không đồng ý rằng * không thể * cho url_for để đoán lộ trình nếu chỉ tồn tại một!) – nevyn

0

Rails có thể chấp nhận một mảng các đối tượng này sau đó được ánh xạ vào một con đường mang tên

ví dụ <% = link_to @ comment.title, [@article, @comment]%>

Bạn sẽ nhận được một liên kết đến /articles/@article.to_param/comments/@article.to_param

này có thể được sử dụng trong form_for và những nơi khác cũng

0

Sử dụng :

link_to '...', admin_opt_in_user_path(@anOptInUser) 

Đối với bộ sưu tập:

admin_opt_in_users_path 

Bạn cũng có thể thêm tiền tố chỉnh sửa và tiền tố mới.

Khi bạn sử dụng form_for hãy chắc chắn bạn vượt qua admin_opt_in_users_path về hành động mới và admin_opt_in_user_path (@anOptInUser) về chỉnh sửa hành động.

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