Railsルーティングでは、「リソース」は、RESTfulリソース用に作成された標準の7つのルート(、、、、、、、index
およびshow
)を指します。通常はそれで十分ですが、別のアクションを作成したい場合もあります。new
create
edit
update
destroy
モデルでは、scope
特別なユーザーのみを返すを作成する必要があります。
class User < ActiveRecord::Base
scope :special, where(:special => true)
end
コントローラ側では、これを行うには2つの方法があります。あなたが提案しているのは、追加のアクションの作成です。
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
このアプローチは、はるかに将来性のあるIMOです。
(この回答はRails-3を想定しています。2.3をまだ使用している場合はお知らせください)