我当前的应用使用以下网址:
/ philsturgeon / philsturgeon / trip_slug
我的模型中的用户附加了这样的行程:
class Trip < ActiveRecord::Base
belongs_to :user
def to_param
"#{user.username}-#{slug}"
end
end
现在我被告知to_param看起来很棒。这意味着我可以使用正常的资源链接:
<h4><%= link_to trip.name, trip %></h4>
而不是像这样手动创建字符串:
redirect_to('/' + current_user.username + '/' + @trip.slug)
问题是我给了一个连字符(或短划线)分隔的URL。只要我将URL to_param更改为#{user.username}/#{slug}
(注意斜杠而不是短划线),我就会收到错误:
ActionController :: RoutingError in 首页#索引
显示 /Users/phil/Scripts/ruby/travlr/app/views/home/index.html.erb 第27行提出的地方:
没有路线匹配{:action =&gt;“destroy”, :controller =&gt;“trip”,:id =&gt;#}
提取的来源(第27行):
24:&lt;%= gravatar trip.user.email,50 %GT; 25:26:27:&lt;%= link_to trip.name,trip%&gt; 28: 29:30:
用户:
答案 0 :(得分:0)
您需要将/
转义为%2F
。所以你应该......
def to_param
"#{user.username}%2F#{slug}"
end
答案 1 :(得分:0)
看起来硬编码URI是这种情况下唯一真正的解决方案。工作正常,但不是最好的代码。
感谢那些回答的人,但他们不太正确。
答案 2 :(得分:-1)
这种情况正在发生,因为'/'在引用URL时具有特殊含义。想象一下,您在/ Home / user / my-file中有一个文件,并尝试使用file:// Home / user / my / file
访问它这基本上就是你要做的。如果你想让'file'在'my'里面,你需要将它存储在那里。对于Rails,您需要制作nested resource。