2010-09-21 3 views
1

У меня есть модель Scouts, для которой требуются два действия в дополнение к стандартным действиям REST, check_in и check_out. Так что у меня есть свой маршрут как:Лучший способ справиться с этим RESTfully

resources :scouts do 
    member do 
    get 'check_in' 
    get 'check_out' 
    end 
end 

Но мне нужно, чтобы отобразить show.html пользователя, со ссылкой на check_in разведчика или check_out разведчик. Чтобы использовать одно и то же представление show.html и сохранить только одно действие show в ScoutsController, я передаю ?mode=check_in или ?mode=check_out, добавленный к URL-адресу, чтобы обозначить это не обычное действие шоу и, таким образом, отображать ссылки «Check In» и «Check Out» ,

Я думал о создании ресурса check_in и check_out, но это не похоже на модель REST, так как проверка входа/выхода - это действие, а не ресурс.

Есть ли лучший способ справиться с этим RESTfully?

Обновление: Режим происходит от разных пользователей с различными Agendas (т.е. рабочих процессов). Одному пользователю может потребоваться показать и отредактировать данные Scout, в то время как другой будет выполнять только действия check_in.

Но пользователю, который выполняет check_in действия, возможно, потребуется отредактировать. Например, пользователь, выполняющий действия check_in, может обнаружить ошибку в данных Scout, исправить ее путем редактирования и вернуться к своему действию check_in. Передача mode позволяет мне определить повестку дня пользователей. Кроме того, добавление mode позволяет мне использовать только один просмотр/редактирование/etc view и просто отображать на нем соответствующие ссылки.

Я мог бы поставить режим в сеанс хэш. В любом случае, тот же результат.

Преимущество - очень простой пользовательский интерфейс (для очень простых пользователей).

Мне кажется, что Scout - это ресурс и check_in и check_out - это действия. Но использование режима кажется неудобным. Но, возможно, это лучший способ. Это мой вопрос.

+0

Как вы узнаете, должна ли отображаться ссылка check_in или check_out? Это поле в скаутской модели? Или это связано с текущей сессией пользователя? Можете ли вы более подробно объяснить, что скаут, check_in и check_out представляют в терминах объектов реального мира? – johnmcaliley

+0

Есть пользователи с ролью "check_in". Это лицо является регистратором. В настоящее время у меня есть CheckInController с только действием индекса, который позволяет пользователю искать и находить скаутов для check_in. Модель Scout имеет флаг 'checked_in'. Ничего из этого не имеет ничего общего с сеансом пользователей. HTH – Karl

ответ

0

Мне кажется, что check_in и check_out относятся к регистрации, поэтому я думаю, что вам нужен другой ресурс для регистрации. check_in будет отображаться для создания и check_out будет отображаться для уничтожения.

resources :registrations 

    match 'check_in', :to => "registrations#create", :as => "check_in" 
    match 'check_out', :to => 'registrations#destroy', :as => "check_out" 
+0

Скаут - это человек, как участник на конференции. Там будет стойка регистрации, где Скаут проверит_в. Check_out для дисквалифицированных скаутов. Check_in и check_out - это действия. Модель Scout имеет флаг 'checked_in' для статуса. – Karl

+0

Я обновил свой ответ, но до сих пор неясно, почему вам нужно передать режим = в URL, если у разведчика есть флаг. Если флаг установлен в модели скаутов, разве вы не можете проверить, установлен ли этот флаг на основе того, на каком скауте вы смотрите? – johnmcaliley

+0

Нет, см. Обновление. – Karl

Смежные вопросы