Tôi có tài nguyên lồng nhau Bar
thuộc về Foo
. Tôi có thể liệt kê thành công tất cả các đối tượng Bar
thuộc về bất kỳ Foo
nào. Nhưng tôi cũng muốn có thể tạo chế độ xem với tất cả các mục Bar
được liệt kê cùng nhau, từ bất kỳ đối tượng nào thuộc về Foo
.Rails 4 - làm cách nào để thêm tuyến đường chỉ mục cho tài nguyên lồng nhau, để liệt kê tất cả các mục độc lập với tài nguyên mẹ
Cấu trúc mô hình là:
# app/models/foo.rb
class Foo < ActiveRecord
has_many :bars
end
# app/models/bar.rb
class Bar < ActiveRecord
belongs_to :foo
end
Các tuyến được định nghĩa là:
# config/routes.rb
resources :foos do
resources :bars
end
tôi nhận được các tuyến đường dự kiến từ cấu hình này:
foo_bars GET /foos/:foo_id/bars(.:format) bars#index
POST /foos/:foo_id/bars(.:format) bars#create
new_foo_bar GET /foos/:foo_id/bars/new(.:format) bars#new
edit_bar GET /bars/:id/edit(.:format) bars#edit
bar GET /bars/:id(.:format) bars#show
PATCH /bars/:id(.:format) bars#update
PUT /bars/:id(.:format) bars#update
DELETE /bars/:id(.:format) bars#destroy
foos GET /foos(.:format) foos#index
POST /foos(.:format) foos#create
new_foo GET /foos/new(.:format) foos#new
edit_foo GET /foos/:id/edit(.:format) foos#edit
foo GET /foos/:id(.:format) foos#show
PATCH /foos/:id(.:format) foos#update
PUT /foos/:id(.:format) foos#update
DELETE /foos/:id(.:format) foos#destroy
Những gì tôi cần là tạo tuyến đường cho bars#index
không được đặt trong phạm vi của foo
. Nói cách khác, tôi về cơ bản muốn:
bars GET /bars(.:format) bars#index
Tôi đã thử bằng cách sử dụng tùy chọn cạn, như sau:
# config/routes.rb
resources :foos, shallow: true do
resources :bars
end
Tuy nhiên, điều này không hỗ trợ: action index, theo documentation.
Cách tốt nhất để làm điều này là gì? Có một cuộc thảo luận Stack Overflow hữu ích here, sử dụng before_filter
để xác định phạm vi - nhưng từ năm 2009. Đánh giá cao bất kỳ hướng dẫn cụ thể nào về cách thiết lập cả bộ điều khiển và tệp config/routes.rb
một cách thích hợp!
Thêm 'tài nguyên: thanh' riêng biệt không hoạt động? –