问题描述:
我有一个中间表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中读到的那些没有这样的东西,我想避免插件,如果可能。是不是有更好的方法比案例或解析网址告诉哪些参数传递给我,所以我可以查找我的数据库?
感谢!!!
答案 0 :(得分:1)
这个似乎就像你想要实际处理案件的两个不同的行动一样,如果它是一个很大的问题,但你可以< / em>通过使用默认哈希 - http://guides.rubyonrails.org/routing.html#defining-defaults来解决这个问题 - 指定一个参数,告诉你你要遵循哪一个来获得相同的案例。
我的意思是两种不同的行为是路由中有:action => update_from_a
,除了普通的:update
方法之外,控制器中还有适当的方法。其中一些建议可能是特定于rails 3的。