В маршрутизации Rails «ресурс» относится к 7 стандартным маршрутам, которые создаются для ресурсов RESTful: index
, show
, new
, create
, edit
, update
и destroy
.Обычно этого достаточно, но иногда вам может понадобиться создать другое действие.
В модели вы хотите создать scope
, который возвращает только специальных пользователей:
class User < ActiveRecord::Base
scope :special, where(:special => true)
end
Нана стороне контроллера, есть два способа сделать это.То, что вы предлагаете, - это создание дополнительного действия:
match "/users/special" => "users#special"
resource :users
В контроллере ваше специальное действие вернет только что созданную область:
class UsersController < ApplicationController
def special
@users = User.special
end
end
Это будет делать то, что выспросите, но я бы предложил НЕ делать это таким образом.Что если позже вы добавите другие флаги, по которым хотите искать?Что делать, если вы хотите искать по нескольким флагам?Это решение недостаточно гибкое для этого.Вместо этого, оставьте маршруты такими, какими они являются:
resource :users
и просто добавьте дополнительную строку в ваш контроллер:
class UsersController < ApplicationController
def index
@users = User.all
@users = @users.special if params[:special]
end
end
и теперь, когда вы хотите отобразить специальных пользователей, простоНаправьте пользователя на /users?special=true
Этот подход гораздо более ориентирован на будущее, ИМО.
(Этот ответ предполагает использование Rails-3. Если вы все еще используете 2.3, дайте мне знать)