2010-09-09 28 views
20

Tôi có bộ điều khiển CRUD cho mô hình.Đường ray 3: định tuyến tài nguyên cho một tên khác

Làm resources :foo cho phép tôi định tuyến theo số /foo/:id, v.v. để gọi hành động.

Tôi muốn thêm tuyến đường cho bản dịch 'foo' bằng một ngôn ngữ khác. Hãy nói 'toto'. Vì vậy, tôi muốn tất cả các /toto/:id, v.v., các tuyến đường hoạt động chính xác như các tuyến đường như /foo/:id, v.v.

Làm cách nào để đạt được điều đó?

Trả lời

34

Bạn có thể thêm một nguồn lực mới và chỉ định foo như bộ điều khiển:

resources :toto, :controller=>"foo" 

này sẽ chỉ tất cả các hành động để "foo", nhưng có một Gotcha. Tôi nghĩ rằng bạn sẽ gặp vấn đề với các liên kết trên trang, nếu bạn đang sử dụng foo_url hoặc một cái gì đó như thế. Vì vậy, bạn sẽ phải tìm ra một cách để tạo ra các URL dymanically dựa trên bộ điều khiển trong "request.path".

+0

Tuy nhiên hoạt động như một nét duyên dáng trong Rails 4.1 – Omni

+1

Bất kỳ ý tưởng như thế nào chúng ta có thể nhận được các quan điểm để tải lên từ 'views/toto' thay vì' xem/foo'? – FloatingRock

+0

'tài nguyên: toto,: controller =>" foo ",: path =>" toto "' – Ruby

21

này sẽ cho phép bạn đổi tên đường dẫn được người dùng xem nhưng giữ nguyên tên gốc của bộ điều khiển của bạn trong các mã:

scope(:path_names => { :new => "neu", :edit => "bearbeiten" }) do 
    resources :categories, :path => "kategorien" 
end 

From the Ruby on Rails Guides

+1

+1 đây là một! –

0

Bạn có thể đạt được một cái gì đó gần với phạm vi sử dụng này:

scope ':language/' do 
    resources :foo, controller: 'bar_controller' 
end 

Điều này làm cho bar_controller của bạn trở thành tài nguyên thành bất kỳ điều gì/foo, nơi mọi thứ được chuyển thành thông số: ngôn ngữ.

vậy:

  • en_US/foo
  • de_DE/foo
  • ja_jp/foo

tất cả được xử lý bởi bar_controller, với việc lập bản đồ tài nguyên bình thường, và bạn sẽ có được params [ : ngôn ngữ] trong bộ điều khiển miễn phí.

2

Nếu tôi hiểu chính xác, bạn chỉ muốn sử dụng một đường dẫn khác.

resources :foo, path: 'toto' 

Bây giờ bạn sẽ có:

GET /toto   foo#index 
GET /toto/:id  foo#show 
... 
Các vấn đề liên quan