2012-07-25 100 views
0

问题的说明:处理不同的路由(具有不同的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告诉哪些参数在哪里传递更好的方法,所以我可以查看我的数据库?

谢谢!

回答

1

似乎等,其中你想实际上有两个不同的动作办案的情况下,如果它是太大的关注,但你可以通过使用默认的哈希解决此破解 - http://guides.rubyonrails.org/routing.html#defining-defaults - - 指定一个参数,告诉你要跟随哪一个以获得相同的大小写。

我的意思是两种不同的行为是路线中有:action => update_from_a,除了正常的:update方法外,控制器中还有一个合适的方法。其中一些建议可能是轨道3特定的。

+0

那么,这就是我最初的想法,但是最好的做法是遵循REST风格的指南,我正在更新X的状态,因此应该是对特定资源的PUT请求(在这种情况下是唯一的X )无论你正在更新什么财产。这也可以节省代码,并且更符合我的想法。 – yowie 2012-07-25 19:11:04

+0

通过这种方式建立起来,对外部世界而言,您提供的是单一资源,并且内部只有两个独立的操作。我在这里回答“这么多问题”的原因是,根据参数确定做什么是好的。这主要取决于你的品味和风格,这是正确的。 – corprew 2012-07-25 22:57:53

+0

实际上,对于外界来说,它仍然是单一资源,好点!唯一的下降部分仍然是超载的路线文件与所有可能的情况下... 谢谢! – yowie 2012-07-25 23:59:26

相关问题