2010-09-23 47 views
0

我想有一个URL是这样的:Rails:非正统网站的资源?

/薪酬/区域/ 1

,我想它映射到任务控制器的payroll_list功能。我也想使用REST。什么是最好的方法来做到这一点?

非常感谢!

回答

1

嗯,我建议你最好按照惯例如何处理这个问题。如果您仍然坚持使用这些“奇怪的”URL并且想要忽略在进一步开发期间可能产生的问题/头痛,那么尝试使用折射。

我不想粗鲁,但目前在我看来,你不明白为什么宁静的URL是他们的方式。请首先了解此背后的设计,然后重新考虑您的应用/控制器和路由设计。我敢打赌你会被启发。

在此示例中,您的网址应该可能为/regions/1/payrollsmap.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可能希望将任务转交给你的任务控制器。至少这可能会让人困惑(但是,它实际上并不期望这些是任务模型,所以它可能会起作用)。

顺便提一句 - 请记住:“宁静”也意味着你的应用程序应该回答资源上的标准动词,而不仅仅是使用“足智多谋”的路线。这也是关于GET,PUT,DELETE和POST http动词,当然还有“编辑”,“新”等默认动作。不要试图让你的控制器变得庞大而复杂。遵循“格格控制器 - 胖模型”的座右铭。

+0

请参阅?我知道有人可以帮我解决这个问题! :D这正是我正在寻找的。谢谢! – 2010-09-23 23:26:15

+0

P.S. - 是的,我需要重新阅读该文档。有很多我需要重新阅读。只需要完成这个当前的项目。 (再次感谢) – 2010-09-23 23:27:13

+0

哦,等等...如果我希望URL中包含“工资单”,但是要使用任务控制器处理工资单请求,我该怎么办? – 2010-09-23 23:28:57

0

OK,所以一个更好的问题,那么可能是这样的:

我怎样才能得到它让我用你的建议:

/地区/ 1 /工资

,并有地图RESTfully:

任务控制器索引,新等,前缀为“payroll_”?

像这样:TasksController#payroll_index或TasksController#payroll_new

+0

映射到即/ regions/1/payroll/new等 – 2010-09-24 00:02:21

+0

这不是它应该如何完成......这完全违背了Rails中通常的设计决策。看起来你想要某种封装,所以你可能要考虑命名空间。阅读关于这一点。 – hurikhan77 2010-09-26 21:21:36