Попытка сделать что-то действительно простое - может, кто-нибудь предоставит правильное заклинание?
По сути, мы Biscuit
необязательно вложены в User
, поэтому нам нужны такие маршруты, как:
/biscuits
/biscuits/1
/users/2/biscuits
/users/2/biscuits/3
и т.д.
У нас есть представления типа biscuits/index
, которые вызывают частичный biscuits/_index
для отображения списка. Я хотел бы вызвать этот же фрагмент из представления профиля пользователя, users/edit
, но мне неясно, какие хелперы resource_url использовать:
resources :users do
resources :biscuits
end
class BiscuitsController < InheritedResources::Base
belongs_to :user, optional: true
end
Пользователи / edit.html.haml:
= render 'biscuits/index', biscuits: @user.biscuits.all
печенье / _index.html.haml:
- biscuits.each do |biscuit|
%tr
%td= biscuit.title
%td= link_to image_tag(biscuit.file_url(:thumb,:large)), resource_url(biscuit)
%td
= link_to 'Show', resource_url(biscuit)
|
%td
= link_to 'Edit', edit_resource_url(biscuit)
Эта часть отлично работает, когда вызывается из BiscuitsController
в /users/1/biscuits
, но она бомбардирует с NoMethodError in Users#edit undefined method 'user_url' for #<UsersController>
при вызове из UsersController
в /users/1/edit
- кажется, resource_url
относится к пользователю здесь не коллекция печенья.
Как я могу заставить ресурс / коллекцию быть любой коллекцией ресурсов, независимо от текущего контроллера?
Какой лучший способ сделать это?
Также, скажем, мы переопределяем UsersController#collection
и #resource
, эти методы на UsersController
вызываются, если маршрут вызывает BiscuitsController
через /users/1/biscuits
? Или только один Controller
на каждый запрос когда-либо создавался Rails?