这是我的佣金路线的一小部分:
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]+/}
所以基本上,我的预期路线是这样的
localhost:3000/words/all/word
但是我得到了类似的东西
localhost:3000/words/all/word.8 # obviously the dot id syndrome
这是我在路径/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;与其他几篇文章一样,这是路径辅助函数,我在使用文档来找到答案时遇到了困难。 (我什至找不到它)
最佳答案
看起来您不小心将一个对象传递给了路由的可选 (.:format)
部分。这就是为什么对象的 ID 会在一段时间后显示 - 这正是格式(.html
、.css
等)在 URL 中的显示方式.
看看你是如何调用你的路线的,并确保你没有无意中传递了太多的东西。
编辑:是的,现在您已经添加了链接,这就是您正在做的事情。查看 word_path
调用 - 您将向其中传递三个变量 - word
、word.category
和 word.name
.您已将其中两个明确分配给 route 的 :category
和 :word_param
点。第三个额外变量会自动分配给 :format
,因为这是路由中剩下的唯一变量。
尝试这些:
word_path(category: word.category, word_param: word.name)
edit_word_path(category: word.category, word_param: word.name)
关于ruby-on-rails - rails : Why does my route enforce an ending with a dot id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20536068/