2012-01-09 16 views
7

Tôi đã tìm kiếm và tìm kiếm và tôi không thể tìm thấy trang mô tả cú pháp của routes.rb trong Rails 3. Có hướng dẫn, tổng quan, thậm chí là các ví dụ nâng cao nhưng tại sao không có trang giải thích chính xác cú pháp của từng từ khóa ?? TrangRails routes.rb syntax

http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/

này chứa rất nhiều ví dụ tiên tiến nhưng không dành thời gian để thảo luận về các hành vi của tất cả các ví dụ được đưa. Tôi sẽ đánh giá cao nếu ai đó có thể chỉ cho tôi một trang mà phá vỡ cú pháp của routes.rb.

Đây là vấn đề tôi đang cố giải quyết. Tôi có hai mô hình modelA và modelB. Mối quan hệ là modelA has_many modelB và modelB thuộc về modelA. Tôi tạo ra bộ điều khiển cho modelB dưới không gian tên của modelA. Vì vậy, trong thư mục đường ray ứng dụng của tôi, tôi có

app/controllers/modelA_controller.rb 
app/controllers/modelA/modelB_controller.rb 

Tôi muốn tuyến đường của tôi là như vậy:

http://localhost:3000/modelA/:modelA_id/modelB/ [index] 
http://localhost:3000/modelA/:modelA_id/modelB/:modelB_id [show] 
etc. 

Tôi đã thử các sau đây trong routes.rb và không ai trong số hoạt động:

resources :modelA do 
    resources :modelB 
end 
-- 
resources :modelA do 
    member do 
    resources :modelB 
    end 
end 
-- 
namespace :modelA do 
    resources :modelB 
end 
-- 
match '/modelA/:modelA_id/modelB/action', :to => '/modelA/modelB#action' 

Tôi biết một số trong những điều tôi đã cố gắng rõ ràng là sai nhưng khi bạn đã dành 2 ngày trên một vấn đề duy nhất, bất cứ điều gì đi!

+0

Bạn đã cố gắng hướng dẫn các đường ray trên định tuyến? http://guides.rubyonrails.org/routing.html – leonardoborges

Trả lời

0

Lý do không ai có hướng dẫn "dứt khoát" về cú pháp định tuyến là nó khá linh hoạt để bạn có thể viết một vài chương về một chủ đề đó. Tuy nhiên, tôi muốn giới thiệu: http://guides.rubyonrails.org/routing.html

Từ câu hỏi của bạn, có vẻ như bạn đang namespacing modelB dưới modelA nhưng bạn cũng muốn id cho modelA được trong con đường riêng của mình.

Vì vậy, nếu ModelBController của bạn trông giống như sau:

class ModelA::ModelBController < ApplicationController 
    # controller code here 
end 

sau đó bạn chỉ có thể làm:

resources :modelA do 
    resources :modelB, :module => :modelA 
end 

Tuy nhiên, bạn có chắc bạn muốn không gian tên bộ điều khiển như vậy? Nếu bạn chỉ muốn các tài nguyên lồng nhau như mối quan hệ has_many điển hình, bạn không cần phải đặt tên theo cách modelB trong số modelA.

Thay vào đó, bạn phải:

/app 
    /controllers 
    /modelA 
     # some files 
    /modelB 
     # some files 

Và điều khiển modelB bạn sẽ là:

class ModelBController < ApplicationController 
    # controller code here 
end 

Sau đó, bạn có thể làm

resources :modelA do 
    resources :modelB 
end 
+1

Cảm ơn !! Tôi thực sự không cố ý tạo modelB theo modelA. Tôi đã cố gắng tìm ra cách để lồng ghép các tài nguyên sao cho 'http: // myserver/modelB' không thể truy cập được và chỉ có thể truy cập thông qua' http: // myserver/modelA /: modelA_id/modelB' và một nơi nào đó mà ai đó đã đề nghị sử dụng ' đường ray tạo bộ điều khiển modelA/modelB'.Bây giờ tôi nhận ra rằng tôi nên đạt được mục tiêu ban đầu của mình bằng cách sử dụng các tuyến đường chứ không phải bằng cách điều khiển các bộ điều khiển. Bạn có thể nói tôi là một newbie. Điều đó nói rằng, dưới những gì tình hình là phạm vi đề nghị ?? – pvenky

+0

Không gian tên các bộ điều khiển như vậy là nhiều hơn cho việc tổ chức chúng và chỉ là vấn đề ưu tiên. Nó chỉ thêm một chút phức tạp hơn để định tuyến mà bạn có thể không cần ngay bây giờ. Tôi khuyên bạn nên ở lại với tuyến đường tài nguyên lồng nhau đơn giản. – iwasrobbed

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