我想要一个这样的网址:
/工资/区域/ 1
我希望它映射到Tasks Controller的payroll_list函数。我也想使用REST。最好的方法是什么?
非常感谢!
答案 0 :(得分:1)
好吧,我建议你最好按照惯例来处理Rails。如果您仍然坚持使用这种“奇怪”的URL并且想要忽略在进一步开发过程中可能产生的问题/头痛,那么请尝试使用折射。
我不想变得粗鲁,但目前我觉得你不明白为什么宁静的网址就是这样。请先了解后面的设计,然后重新考虑您的应用程序/控制器和路由设计。我打赌你会受到启发。
在此示例中,您的网址可能应为/regions/1/payrolls
map.resources :regions, :has_many => :payrolls
。然后,您的工资单列表将由具有PayrollsController
的{{1}}呈现 - 这实际上是有意义的(可能是您尝试使用您的网址布局实现的)。代码段:
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部分“payrolls”将嵌套资源映射到任务控制器。但这可能不像您预期的那样有效,因为宁静的逻辑意味着您应该在map.resources :regions do |regions|
regions.resources :tasks, :as => :payrolls
end
中处理工资单模型。否则你可能会遇到看起来很奇怪的代码。也许你的PayrollsController
的设计是错的? Rails可能会期望将任务处理到您的任务控制器,尽管您将其命名为payrolls。至少这可能令人困惑(但是,它实际上并不期望这些是任务模型,所以它可能会起作用)。
BTW - 请记住:“restful”也意味着您的应用程序应该回答资源上的标准谓词,而不仅仅是使用“足智多谋”的路由。它也是关于GET,PUT,DELETE和POST http动词,当然还有“编辑”,“新”等默认动作。不要试图让你的控制器变得庞大而复杂。遵循“瘦瘦的控制器 - 脂肪模型”的座右铭。
答案 1 :(得分:0)
好的,这是一个更好的问题,那么可能就是这样:
我怎样才能使用你的建议:
/地区/ 1 /工资表
将REST映射到:
带有索引,新等的任务控制器,前缀为“payroll _”?
像这样:TasksController#payroll_index或TasksController#payroll_new