在 Rails 路由中,“资源”指的是为 RESTful 资源创建的标准 7 条路由: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
IMO,这种方法更具前瞻性。
(此答案假设 Rails-3。如果您仍在使用 2.3,请告诉我)