这是我的佣金路线的一小部分:
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;像其他几个帖子一样,它是路径助手功能,我在使用文档来解决问题时遇到了麻烦。 (我甚至找不到它)
答案 0 :(得分:3)
看起来您不小心将对象传递到路线的可选(.:format)
部分。这就是对象的ID在一段时间后出现的原因 - 这正是格式(.html
,.css
等)应该在URL中显示的原因。
看看你如何称呼你的路线,并确保你不会无意中传递太多东西。
编辑:是的,既然你已经添加了链接,这就是你正在做的事情。查看word_path
来电 - 您在那里传递了三个变量 - word
,word.category
和word.name
。您已明确将其中两个分配到路线中的:category
和:word_param
点。第三个额外变量会自动分配给:format
,因为这是路径中剩下的唯一变量。
请尝试这些:
word_path(category: word.category, word_param: word.name)
edit_word_path(category: word.category, word_param: word.name)