Один ресурс и несколько ресурсов - PullRequest
1 голос
/ 23 октября 2009

У меня есть модель Whitelabel и пользователь has_many: whitelables

У меня есть собственный метод current_whitelabel (например, authlogic или restful_auth для current_user)

Я хочу, чтобы мои пользователи управляли своими белыми метками (т.е. edit_whitelabels_path (id)).

Но я не хочу отправлять идентификатор белой метки в параметрах, когда он ссылается на текущую белую метку.

Поэтому моя идея состоит в том, чтобы создать два ресурса: map.resources whitelabels и map.resource whitelabel.

Но мне это не очень нравится. Есть ли более сексуальный способ сделать это?

Ответы [ 2 ]

1 голос
/ 24 октября 2009

Хорошо, я наконец решил свою проблему.

У каждой whitelabel есть свой собственный поддомен (благодаря subdomain_fu), поэтому мне просто нужен один ресурсный whitelabel на моих маршрутах, чтобы выполнить действие на моем current_whitelabel, и если я хочу выполнить действие на других whitelabels, мне просто нужно переключить поддомен .

Спасибо EmFi за попытку ответить на мой странный вопрос.

0 голосов
/ 23 октября 2009

В вашем контроллере вы можете сделать это:

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 используйте приведенный выше код. Это делает вещи СУХОМИ, используя один и тот же контроллер для разных путей с одинаковыми действиями. Ресурс определяет действие панели мониторинга, поэтому вам придется добавить это и в контроллер. Но если вы используете версию before_filter, проблем не должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...