2010-11-11 111 views
1

我现在的应用程序使用的网址,如:友好的URL 3

/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 Home#index

Showing /Users/phil/Scripts/ruby/travlr/app/views/home/index.html.erb where line #27 raised:

No route matches {:action=>"destroy", :controller=>"trips", :id=>#}

Extracted source (around line #27):

24: <%= gravatar trip.user.email, 50 %> 25: 26: 27: <%= link_to trip.name, trip %> 28: 29: 30:
User:

回答

0

看起来像硬编码的URI是在这种情况下唯一真正的解决方案。工作正常,但不是最好的代码。

感谢那些回答,但他们不是很正确。

0

你需要躲避/%2F。所以你应该有...

def to_param 
    "#{user.username}%2F#{slug}" 
end 
+0

实际上你应该逃避一切:“#{user.username} - #{slug}”。to_s.gsub(/ [] /,' - ') – 2010-11-11 10:33:04

+0

添加以下URL:/ trips/philsturgeon% 2Famerica-2012我需要链接到/ philsturgeon/america-2012 – 2010-11-11 16:35:54

-1

发生这种情况是因为'/'具有引用URL的特殊含义。想象一下你在/ Home/user/my-file中有一个文件,并且你试图使用file:// Home/user/my/file来访问它。

这基本上就是你想要做的。如果你想'文件'在'我的'里面,你需要将它存储在那里。在Rails的情况下,你需要制作一个nested resource

+0

嘿,我不确定这与它有什么关系,因为它是webroot中的应用程序站点,并且始终有效。我的URL目前工作正常,我只想做“Rails方式”。 – 2010-11-11 16:31:24

+0

您需要将路由添加到routes.rb中才能执行所需操作。 – 2010-11-12 06:52:48

+0

是的,我的路线完成了,工作正常。我需要链接回该路由页面。 – 2010-11-12 15:16:11