0

我想要一个这样的网址:

/工资单/地区/1

我希望它映射到任务控制器的 payroll_list 函数。我也想使用 REST。最好的方法是什么?

非常感谢!

4

2 回答 2

1

好吧,我建议您最好遵循 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 动词,当然还有“编辑”、“新建”等默认操作。不要试图让你的控制器变得又大又复杂。遵循“瘦控制器 - 胖模型”的座右铭。

于 2010-09-23T21:25:21.217 回答
0

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

我怎样才能得到它,以便我使用你的建议:

/地区/1/工资单

并将该映射 RESTfully 映射到:

具有以“payroll_”为前缀的索引、新等的任务控制器?

像这样:TasksController#payroll_index 或 TasksController#payroll_new

于 2010-09-24T00:01:48.370 回答