0

「routes.rb」ファイルには、次の行があります。

resource :users

これにより、RESTful な方法で User モデルにアクセスするための一連の名前付きルートが得られます。

ここで、ユーザーの特別なクラスを作成するなど、ユーザー モデルにいくつかの追加を行いました。これらは引き続き User モデルに保存されますが、データベースにはそれらを特別なものとして識別する「特別な」フラグがあります。

では、special_users リソースを作成することは可能ですか? たとえば、「/special_users」への名前付きルートとして「special_users_path」が必要です。これは、URL で GET を実行すると、特別なユーザーのみのインデックスを返します。

これを行う方法はありますか?

4

2 に答える 2

0

special_usersをリソースとして設定できます。

resource :special_users

特別なコントローラーを指す必要がある場合は、次のように指定できます。

resource :special_users, :controller => :users

しかし、ある種のユーザーを取得するために別のコントローラーを作成するのではなく、パラメーターを使用してそれらを取得することをお勧めします。

 class UsersController < ApplicationController
   def index
     users = case params[:type].to_s
               when "special"
                 User.special_users # Using named scopes
               else
                 User.all
             end
   end
 end

users_pathを使用して特別なユーザーを呼び出す場合:

users_path(:type => :special)
于 2010-11-12T00:52:41.633 に答える
0

Railsルーティングでは、「リソース」は、RESTfulリソース用に作成された標準の7つのルート(、、、、、、、indexおよびshow)を指します。通常はそれで十分ですが、別のアクションを作成したい場合もあります。newcreateeditupdatedestroy

モデルでは、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をまだ使用している場合はお知らせください)

于 2010-11-12T00:48:36.577 に答える