当我没有传递模型ID时,为什么link_to会在其输出中添加一个id?

时间:2009-10-09 18:41:37

标签: ruby-on-rails

我正在使用Rails 2.2.2与旧学校路线(即我不是RESTful),我注意到来自Rails link_to方法的奇怪行为。这是我的电话:

link_to("my description", { :controller => controller, :action => action }, :id => "html_id")

我希望该方法生成“/ controller / action”,但我得到的是“/ controller / action / id”。这仅在处理对“/ controller / action / id”URL的请求时调用link_to时发生,并且控制器和操作与我传递给link_to的控制器和操作相同。例如:

  1. 我在“/ controller / action”页面上,该页面上“/ controller / action”的链接正确指向“/ controller / action”
  2. 我点击指向“/ controller / action / id”的链接,新页面上指向“/ controller / action”的链接现在指向“/ controller / action / id”,其中id是相同的作为上一个请求中的id。
  3. 在我看来,似乎有些事情变得困惑。请求中有一个id触发link_to调用,但我不希望它被引用,我明确地不传递id参数。为了记录,这是我的旧学校默认路线:

    map.connect ':controller/:action/:id'
    map.connect ':controller/:action/:id.:format'
    

    知道为什么会发生这种情况,更重要的是,如何阻止它?非常感谢。

1 个答案:

答案 0 :(得分:1)

link_to调用url_for帮助器调用ActionController :: url_for 如果ActionController :: url_for被赋予:action,则它假定当前页面的:id。

我不太确定如何修复它。

明确指定一个nil id,可能会工作或导致它与nil对象错误中断。

link_to "My description", {:controller => controller, :action => action, :id => nil}, :id => "html_id"

您也可以通过命名路由到达控制器/操作对。