В вашем действии контроллера вы можете сделать это:
class WhitelabelsController < ActionController
def edit
@whitelabel = params[:id] ? Whitelabel.find(params[:id]) : current_whitelabel
redirect_to whitelabels_url unless @whitelabel
....
end
...
end
Теперь рельсы будут относиться к /whitelabel/edit
как /whitelabel/edit/#{current_whitelabel.id}
без указания идентификатора.
Если это происходит для нескольких действий, вы можете сделать это как фильтр перед фильтром. Просто не забудьте удалить все строки @whitelabel = Whitelable.find(params[:id])
из отдельных действий.
class WhitelabelsController < ActionController
before_filter :select_whitelabel, :except => [:index, :new]
def select_whitelabel
@whitelabel = params[:id] ? Whitelabel.find(params[:id]) : current_whitelabel
redirect_to whitelabels_url unless @whitelabel
end
...
end
Отвечая на более четко сформулированный вопрос в комментарии: Вы можете использовать уникальный ресурс в тандеме с указанным кодом, чтобы иметь эффект, который вы хотите.
конфигурации/routes.rb
map.resource :my_whitelabel, :controller => "whitelabels", :member => {:dashboard => :get}
Затем в контроллере whitelabels использовать приведенный выше код. Это держит вещи DRY, используя один и тот же контроллер для разных путей с теми же действиями. Ресурс определяет действие панели управления, поэтому вам придется добавить это и к контроллеру. Но если вы используете версию before_filter, проблем не должно быть.
Спасибо за ваш ответ EmFi, но он не отвечает на мой вопрос. Возможно, мой вопрос непонятен. У меня есть некоторые действия для всех whitelabels, но некоторые из них предназначены только для текущего. , поэтому мне нужны два типа URL-адресов: /whitelabels/id/action для всех пользовательских символов whitelabels. И что-то вроде/my_current_whitelabel/dashboard. Нужно ли мне делать два разных ресурса? – lou
Ваш вопрос определенно не ясен. Я обновил свой ответ, чтобы дать решение проблемы, упомянутой в вашем комментарии. – EmFi
Хорошо, спасибо EmFi Я думал, что для этого было больше рельсов, но, возможно, нет. Таким образом, я буду выполнять именованный маршрут. – lou