2010-11-11 150 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