处理同一控制器的不同路径(具有不同的参数)

时间:2012-07-25 18:37:10

标签: ruby-on-rails model-view-controller controller routes

问题描述:

我有一个中间表X,用于将表A中的元素映射到表B中的元素。

此表X还包含许多有关此映射属性的列。表X中记录的唯一性不仅仅是id od和id od B,而且还是表示映射的唯一标识符。

当尝试更新表X的属性时,我添加到路由:

map.A :only=>[:none] do |a|
    a.resources B :controller=>X :only[:update]
end

map.resources x :only=>[:update]

所以这基本上让我可以访问我的X控制器的更新方法。

问题:

我的问题是:如何通过传递A和B或只是X标识符来判断何时访问控制器?我知道,看看params,我可以检查A是否存在,如果不存在那么它就是X但是这不是很实用/安全。如果它变得更复杂,我将需要多个ifs来检测确切的情况。

即使最糟糕的是,想象一下,由于某种原因,我还有另一条路线:

map.resources Y :controller=>X :only[:update]

然后在我的params哈希中,我只会:id,如果条件甚至不起作用......

注释:

我希望路由有一个:key选项,所以你可以重命名参数哈希中的键,但是从我在Rails 2中读到的那些没有这样的东西,我想避免插件,如果可能。是不是有更好的方法比案例或解析网址告诉哪些参数传递给我,所以我可以查找我的数据库?

感谢!!!

1 个答案:

答案 0 :(得分:1)

这个似乎就像你想要实际处理案件的两个不同的行动一样,如果它是一个很大的问题,但你可以< / em>通过使用默认哈希 - http://guides.rubyonrails.org/routing.html#defining-defaults来解决这个问题 - 指定一个参数,告诉你你要遵循哪一个来获得相同的案例。

我的意思是两种不同的行为是路由中有:action => update_from_a,除了普通的:update方法之外,控制器中还有适当的方法。其中一些建议可能是特定于rails 3的。