我想要一个这样的网址:
/工资单/地区/1
我希望它映射到任务控制器的 payroll_list 函数。我也想使用 REST。最好的方法是什么?
非常感谢!
我想要一个这样的网址:
/工资单/地区/1
我希望它映射到任务控制器的 payroll_list 函数。我也想使用 REST。最好的方法是什么?
非常感谢!
好吧,我建议您最好遵循 Rails 如何处理此问题的约定。如果您仍然坚持使用这种“奇怪”的 URL,并且想忽略在进一步开发过程中可能产生的问题/头痛,那么请尝试使用 Refraction。
我不想变得粗鲁,但目前在我看来,您似乎不明白为什么宁静的 URL 是这样的。请先了解这背后的设计,然后重新考虑您的应用程序/控制器和路由设计。我打赌你会被启发的。
在此示例中,您的 URL 可能应该/regions/1/payrolls
带有map.resources :regions, :has_many => :payrolls
. 然后,您的工资单将通过PayrollsController
具有params[:region_id]
- 来呈现,这实际上是有道理的(可能是您试图通过 URL 布局实现的目标)。代码片段:
def index
if params[:region_id]
@region = Region.find(params[:region_id])
@payrolls = @region.payrolls
else
@payrolls = Payroll.all
end
end
如果您仍然希望在不同的命名 URL 下拥有资源,请使用以下命令:
map.resources :regions do |regions|
regions.resources :tasks, :as => :payrolls
end
这将使用命名的 URL 部分“工资单”将嵌套资源映射到任务控制器。但这可能不像您预期的那样工作,因为宁静的逻辑意味着您应该在PayrollsController
. 否则你可能会遇到看起来很奇怪的代码。也许您的设计TasksController
是错误的?尽管您将其命名为工资单,Rails 可能希望将任务处理到您的任务控制器。至少这可能会令人困惑(但是,它实际上并不期望这些是任务模型,因此它可能会起作用)。
顺便说一句 - 请记住: “restful”还意味着您的应用程序应该回答资源上的标准动词,而不仅仅是使用“resourceful”路由。它还涉及 GET、PUT、DELETE 和 POST http 动词,当然还有“编辑”、“新建”等默认操作。不要试图让你的控制器变得又大又复杂。遵循“瘦控制器 - 胖模型”的座右铭。
好的,所以一个更好的问题,那么可能是这样的:
我怎样才能得到它,以便我使用你的建议:
/地区/1/工资单
并将该映射 RESTfully 映射到:
具有以“payroll_”为前缀的索引、新等的任务控制器?
像这样:TasksController#payroll_index 或 TasksController#payroll_new