0

问题描述:

我有一个中间表 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,但这不是很实用/安全。如果它变得更复杂,我将需要多个 if 来检测确切的情况。

更糟糕的是,想象一下由于某种原因我有另一条路线,例如:

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

然后在我的参数哈希中,我将只有 :id 所以,如果条件甚至不起作用......

注释:

我希望有一个:key路由选项,这样您就可以重命名参数哈希中的键,但是从我在 Rails 2 中读到的内容来看,没有这样的事情,如果可能的话,我想避免使用插件。没有比 if 案例或解析 url 来告诉传递哪些参数以便我可以查找我的数据库更好的方法吗?

谢谢!!!

4

1 回答 1

1

似乎是一种情况,您实际上希望有两个不同的操作来处理这些情况,如果这是一个非常令人担忧的问题,但是您可以通过使用默认哈希来解决这个问题——http: //guides.rubyonrails.org/ routing.html#defining-defaults -- 指定一个参数,告诉您要遵循哪个参数来处理相同的情况。

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

于 2012-07-25T19:05:48.617 回答