2009-10-23 4 views
1

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

У меня есть пользовательский метод current_whitelabel (как authlogic или restful_auth для CURRENT_USER)

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

Но я не хочу отправлять идентификатор whitelabel в params, когда он ссылается на current_whitelabel.

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

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

ответ

1

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

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

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

0

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

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, проблем не должно быть.

+0

Спасибо за ваш ответ EmFi, но он не отвечает на мой вопрос. Возможно, мой вопрос непонятен. У меня есть некоторые действия для всех whitelabels, но некоторые из них предназначены только для текущего. , поэтому мне нужны два типа URL-адресов: /whitelabels/id/action для всех пользовательских символов whitelabels. И что-то вроде/my_current_whitelabel/dashboard. Нужно ли мне делать два разных ресурса? – lou

+0

Ваш вопрос определенно не ясен. Я обновил свой ответ, чтобы дать решение проблемы, упомянутой в вашем комментарии. – EmFi

+0

Хорошо, спасибо EmFi Я думал, что для этого было больше рельсов, но, возможно, нет. Таким образом, я буду выполнять именованный маршрут. – lou