Rails:为什么我的路由强制使用点ID结尾?

时间:2013-12-12 05:56:21

标签: ruby-on-rails ruby ruby-on-rails-4

这是我的佣金路线的一小部分:

   new_word GET    /words/add(.:format)                        words#new
create_word POST   /words(.:format)                            words#create
      words GET    /words/:category(.:format)                  words#index
  edit_word GET    /words/:category/:word_param/edit(.:format) words#edit {:word_param=>/[a-zA-Z]+/}
       word GET    /words/:category/:word_param(.:format)      words#show {:word_param=>/[a-zA-Z]+/}
            PATCH  /words/:category/:word_param(.:format)      words#update {:word_param=>/[a-zA-Z]+/}
            PUT    /words/:category/:word_param(.:format)      words#update {:word_param=>/[a-zA-Z]+/}
            DELETE /words/:category/:word_param(.:format)      words#destroy {:word_param=>/[a-zA-Z]+/}

所以基本上,我想要的路线就像

  

本地主机:3000 /字/所有/字

但我有点像

  

localhost:3000 / words / all / word.8#显然是dot id综合症

以下是我在paths / url中传递的一些额外参数的示例(在我的index.html.erb中):

    <td><%= link_to 'Show', word_path(word, category: word.category,word_param:word.name)  %></td>
    <td><%= link_to 'Edit', edit_word_path(word, category: word.category, word_param:word.name) %></td>
    <td><%= link_to 'Destroy', word_path(word, category: word.category, word_param:word.name), method: :delete, data: { confirm: 'Are you sure?' } %></td>

编辑:TLDR;像其他几个帖子一样,它是路径助手功能,我在使用文档来解决问题时遇到了麻烦。 (我甚至找不到它)

1 个答案:

答案 0 :(得分:3)

看起来您不小心将对象传递到路线的可选(.:format)部分。这就是对象的ID在一段时间后出现的原因 - 这正是格式(.html.css等)应该在URL中显示的原因。

看看你如何称呼你的路线,并确保你不会无意中传递太多东西。

编辑:是的,既然你已经添加了链接,这就是你正在做的事情。查看word_path来电 - 您在那里传递了三个变量 - wordword.categoryword.name。您已明确将其中两个分配到路线中的:category:word_param点。第三个额外变量会自动分配给:format,因为这是路径中剩下的唯一变量。

请尝试这些:

word_path(category: word.category, word_param: word.name)
edit_word_path(category: word.category, word_param: word.name)