2016-01-08 42 views
1

我正在嘗試在我的導航欄中使用link_to方法,但我明顯缺乏瞭解其實際工作原理的基礎知識。Ruby on Rails link_to方法

<% link_to "Viral", @viral %> 

我的印象是「病毒」是鏈接的標籤,但我不知道什麼是病毒。該路線是否與控制器/視圖鏈接(即病毒控制器&視圖),如果是,那麼路線將是什麼樣子?我正在試圖爲不同的文章創建分類頁面,並認爲這將是最明顯的導航方式。

+1

它可能會清除你的疑慮:http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to – RAJ

+0

我已經通過的文件看(這是我得到了一段代碼fr嗡,首先)但我正在尋找一個更容易理解的解釋。來自一個地方從小到沒有紅寶石或鋼軌的經驗,API往往最終相當混亂。 –

回答

0

@viral是簡單的路徑。

如果您已經定義像這樣的路線:

get "viral", as: "something#viral" => "viral" 

,那麼你應該把<%= link_to "some text", viral_path %>和鏈接會自動定向到www.domain.com/viral。

如果你有一個特定的網址,你應該在引號後面寫域名。所以,如果您的域名是www.domain.com,你想重定向到www.domain.com/viral,你會寫

<%= link_to "some text", "viral" %> 
0

@viral是一個變量(對象)

link_to是一個輔助方法什麼使HTML鏈接

<%= link_to "Viral", @viral %> 

將建立鏈接顯示的動作,但如果您需要設置其他路徑只需使用:

<% link_to "Viral", viral_path %> 

您可以在終端

rake routes 
1

看到Rails慣例的所有路徑,link_to模型實例轉換成鏈接到記者和RESTful表演動作的URL。

所以,在你的榜樣

<%= link_to "Viral", @viral %> 

相當於

<%= link_to "Viral", viral_path(@viral) %> 

您將獲得在Docs更多信息。

0

link_to需要有以下傳遞給它:

<%= link_to "Link Text", "http://link-path.com" %> 

第一個參數是錨文本,第二是瀏覽器將請求的URL。


由於Rails是一個應用框架,你可以通過動態值到link_to參數。就像是...

#app/helpers/application_helper.rb 
def your_link_helper 
    "http://google.com" 
end 

<%= link_to "Link Text", your_link_method %> 

如果你明白這一點,你就會明白,Rails sets a series of "helper" methods for your "routes",這意味着,而不是(以上)your_link_method,你就可以使用...

#config/routes.rb 
resources :virals 

<%= link_to "Viral", viral_path("12") %> 

-

所以...

@viral是一個instance variable - 在類的實例(在這種情況下,您的控制器)設置的變量:

#app/controllers/virals_controller.rb 
class ViralsController < ApplicationController 
    def show 
     @viral = Viral.find params[:id] 
    end 
end 

由於Ruby是object orientated,它期望每個@instance_variable是由紅寶石分配一個對象

這意味着,如果你通過一個有效的Ruby對象到link_to方法,Rails會提取所有必要的數據調用顯示它行動......

<%= link_to @viral.id, @viral %> 

...居然會是...

<%= link_to @viral.id, viral_path(@viral.id) %>