2011-11-11 56 views
1

我似乎無法設置自定義URL。所有的RESTful路線工作正常,但我不知道如何簡單地將/:unique_url添加到我在模型中創建的現有路線(一個簡單的4個字符的隨機字符串),並將作爲排序的「固定鏈接」。無法在Ruby on Rails 3.1中創建自定義路由

的routes.rb

resources :treks 
match ':unique_url' => 'treks#mobile' 

控制器

. 
. 
def mobile 
    @trek = trek.find(params[:id]) 
end 

這是因爲我試圖確定在現有資源的自定義操作?我可以不使用資源在同一個控制器上創建自定義方法嗎?

順便說一句,當我改變routes.rbmatch 'treks/:id/:unique_url' => treks#mobile它工作正常,但我只是想的URL僅僅是/:unique_url

更新好像find_by_[parameter]是要走的路...

我一直在玩的控制檯,我似乎無法得到任何方法挺身而出......我可以運行Trek.last.fullname例如,但不能運行@trek = Trek.last ......然後打電話...例如,。任何線索爲什麼?我認爲這是我的問題。

+1

你'mobile'方法使用'PARAMS [:編號]',但你不你的路線裏有':id'。你需要在你的模型中創建一個'find_by_unique_url'方法(如果你還沒有),並在你的'mobile'方法中使用它。 –

+0

感謝馬克,我在哪裏創建此方法? – pruett

+0

如果你有'unique_url'字段,那麼你已經有了。在Rails控制檯中,您可以執行'Trek.find_by_unique_url(url)',其中'url'與unique_url匹配,您將看到一個結果。 –

回答

0
trek.find_by_unique_url(params[:unique_url]) # should do the trick 

@pruett沒有,會生成find_by_XXX方法通過Ruby的method_missing的呼叫即時!因此,您可以使用您在模型中定義的任何屬性而不是XXX。

,你甚至可以去儘可能列出多個屬性,如:

find_by_name_and_unique_url(the_name, the_unigue_url) 

檢查這些頁面:

http://guides.rubyonrails.org/active_record_querying.html

http://m.onkey.org/active-record-query-interface


如果你得到一個undefined method ... for nil:NilClass,這意味着th您嘗試調用該方法的e對象不存在,例如是零。

你可能只是錯過了把if語句在該行之前,確保對象是非零

+0

我不知道它是什麼...可能是我整個時間打錯了嗎?反正......現在似乎在工作。我認爲我的屬性unique_url在每次刷新時都會不斷變化,所以我正在追逐一個移動目標,感謝您的幫助。 – pruett

1

那麼在Trek上有一個存儲其獨特url的字段?如果是這樣,你應該做這樣的事情:

@trek = Trek.find_by_url(params[:unique_url]) 
+0

我有一個領域':unique_url',我在回調'before_save'函數中創建。 – pruett

+0

所以在這種情況下,我會定義'find_by_unique_url'方法嗎?'trek.find_by_unique_url(params [:unique_url])' –

+0

? – pruett

-1

嗯。我通常會做這樣的事情:

map.connect "/:unique_url", :controller => "treks", :action => "mobile" 

然後在控制器中的ID是不會適用..你需要改變它的東西是這樣的:

def mobile 
    @trek = trek.find_by_unique_url(params[:unique_url]) 
end 

(也就是如果unique_url正在搜索的列)

+0

這不是Rails 3.1語法。 –

+0

是啊...拋出一個錯誤與Rails 3.1 – pruett

+0

哈..是啊我的大部分應用程序仍然在2.3 ..仍然沒有得到所有的新東西了。 – wejrowski