问题的说明:处理不同的路由(具有不同的PARAMS)为同一控制器
我有一个中间表X从表A中从表B.地图元素以元素
此表X含有关于这个映射的属性也有许多列。表X中记录的唯一性不仅仅是ID od A和ID od B,还是表示映射的唯一标识符。
当试图更新表X的属性,我加入到路线:
map.A :only=>[:none] do |a|
a.resources B :controller=>X :only[:update]
end
map.resources x :only=>[:update]
所以这基本上给我可能的URL来访问我的X控制器的更新方法。
问题:
我的问题是:我怎么能知道当控制器通过使A和B,或只是X标识访问?我知道,看看这些参数我可以检查A是否存在,如果不是,那么它就是X,但这不是很实用/安全。如果它变得更加复杂,我将需要多个ifs来检测确切的案例。
即使是最坏的情况,可以想象,由于某种原因,我有一个像另一条路线:
map.resources Y :controller=>X :only[:update]
然后在我的PARAMS哈希我只想有:ID,因此如果条件甚至不工作...
评论:
我希望能有一个:key
选项的路线,所以你可以在参数哈希但是从我读过的梁2有没有这样的事情重新命名键和竟被我如果可能的话,喜欢避免使用插件。没有比如果情况或解析URL告诉哪些参数在哪里传递更好的方法,所以我可以查看我的数据库?
谢谢!
那么,这就是我最初的想法,但是最好的做法是遵循REST风格的指南,我正在更新X的状态,因此应该是对特定资源的PUT请求(在这种情况下是唯一的X )无论你正在更新什么财产。这也可以节省代码,并且更符合我的想法。 – yowie 2012-07-25 19:11:04
通过这种方式建立起来,对外部世界而言,您提供的是单一资源,并且内部只有两个独立的操作。我在这里回答“这么多问题”的原因是,根据参数确定做什么是好的。这主要取决于你的品味和风格,这是正确的。 – corprew 2012-07-25 22:57:53
实际上,对于外界来说,它仍然是单一资源,好点!唯一的下降部分仍然是超载的路线文件与所有可能的情况下... 谢谢! – yowie 2012-07-25 23:59:26