在Rails路由, '資源' 指的是用於RESTful資源創建的標準7條路線:index
,show
,new
,create
,edit
,update
和destroy
。通常這就夠了,但有時候你可能想創建另一個動作。
在該模型中,要創建一個scope
只返回特定用戶:
class User < ActiveRecord::Base
scope :special, where(:special => true)
end
在控制器方面,有兩種方式來進行此事。你所建議的是一個額外的行動的創建:
match "https://stackoverflow.com/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讓我知道)
在第一個示例中沒有必要使用lambda。這將做到:scope:special,where(special:true) – noodl 2010-11-12 01:17:51
@noodl謝謝,仍然習慣於arel。 – 2010-11-12 01:35:52
謝謝!美麗的解釋和我真的很感謝你去麻煩顯示一個替代方法,以及微不足道的情況。 – spinlock 2010-11-12 17:50:14