2013-03-19 49 views
1

我是Rails的新手,對link_to方法有疑問。第二個參數應該是鏈接的url,它可以使用url helper方法生成。但是,可能需要傳遞:id作爲helper方法的參數,這可以通過傳遞一個對象(其id爲其屬性之一)來完成。URL助手方法使用什麼默認值:id?

那麼,在一種情況下,我沒有將對象傳遞給方法(在其中一個視圖中)。但是,url仍然能夠獲得正確的:id(大概使用前面定義的實例變量)。

當我甚至沒有傳入任何對象時,Rails如何爲id選擇值:

非常感謝!


編輯

下面是相關代碼:

link_to 'Find Movies With Same Director', same_dir_path 

在這裏,我是一個 「秀」 頁面上的URL /movies/1same_dir_path是URL /movies/same_dir/:id的幫助器方法,其中:id將是傳遞對象的代碼,而movie#same_dircontroller#action。注意我沒有將任何對象傳遞給幫助程序方法link_to,但是它從前一個url中獲取:id(在本例中爲'1')。該URL甚至不相對於前一個(路徑不同)。


這是控制器方法(same_dir):

def same_dir  
    @movies = Movie.find(params[:id]) 

    if (@movies.director.nil? || @movies.director == '') 

    flash.keep 
    redirect_to movies_path   
    flash[:warning]="'#{@movies.title}' has no director info"     
    return 

    end 

    @otherMovies = Movie.find_all_by_director(@movies.director) 

end 

這是routes.rb中代碼:

match 'movies/same_dir/:id'=> 'movies#same_dir', :as => :same_dir 
resources :movies 
+1

只是一個提示,因爲你是Rails新手:常見模式'object.nil? || object =='''可以用'object.blank?'來表示,它也適用於數組和散列('array.nil?|| array.empty?'變成'array.blank?') – 2013-03-21 11:20:49

回答

1

閱讀更新的問題後,我可以爲您提供更好的回答:

Rails控制器可以通過url_options方法有默認的url選項。 (似乎沒有成爲一個非常文檔的功能。(here和​​))

默認情況下,這個方法從當前請求返回參數,這是其中ID的來源。

您可以替代它,太:

def url_options 
    { my_parameter: my_value }.merge(super) 
end 

原來的答覆(可能仍然是有用的)

你所看到的是最有可能是瀏覽器的功能。例如下面的代碼:

link_to "Show", "" 

生成HTML代碼:

<a href="">Show</a> 

如果你點擊它定位到空相對於當前URL,這實際上是在網址的瀏覽器鏈接等於當前的網址。

又如:

link_to "Publish", :publish 

產生:

<a href="publish">Publish</a> 

現在,如果您目前的網址是http://localhost/articles/1/edit鏈接將帶你到http://localhost/articles/1/publish。 (請注意,最終的URL中包含即使你是不是有它的HTML源模型ID)

,因爲使用的是相對URL當前模型ID是由瀏覽器保存的兩種情況。

這種行爲可能會給你錯覺的一些神奇的模型ID檢測,尤其是因爲瀏覽器預覽最終(=絕對)的網址時,懸停在鏈接上。

看看源代碼,我敢打賭你生成的鏈接不包含任何模型ID。

+0

非常感謝詳細的答案Daniel!雖然我仍然不確定瀏覽器如何獲得:id,在我的情況下,因爲我的URL相對於第一個路徑是** not **(它是/ movie/same_dir /:id,前一個鏈接是/ movie /: ID)。我也提出了我的代碼。 – user1968919 2013-03-20 17:21:48

+0

是的,也發現你的觀點[這裏](http://apidock.com/rails/ActionController/Base/url_for)。非常感謝! – user1968919 2013-03-21 09:55:15

+0

謝謝,我將其添加到我的答案中供將來參考。 – 2013-03-21 11:21:59

相關問題