2012-09-16 30 views
0

在我的視圖文件(* .html.erb)中,我想創建一個顯示兩個模型數據點(名稱和投票計數)的鏈接。在Bobby的情況下,他有五張選票,它看起來像是: Bobby(5)如何從Ruby /非ruby混合字符串創建link_to

由於我想要顯示的字符串包含非ruby括號,因此如何使用link_to來執行此操作?

之前,把它變成一個鏈接,代碼,

<%= user.name %>(<%= link.user.reputation_value_for(:votes).to_i %>) 

非常感謝您的幫助!

回答

1

試試這個:

<%= link_to "#{user.name}(#{user.reputation_value_for(:votes).to_i})", whatever_path %> 

當建立在它的Ruby代碼的字符串,只需鍵入它通常並把Ruby代碼你需要在這之間:#{}

當頁面加載時,首先編譯erb並在我的字符串上面

#{user.name} 

將與Bobby被取代,

#{user.reputation_value_for(:votes).to_i} 

將與8取代(如果那是他的信譽值)給你

Bobby(8)

+0

這是完美的,謝謝。它總是看起來很容易,一旦你看到答案... :) – umezo

1

link_to能夠接受模塊,如:

<%= link_to user do %> 
    <%= user.name %>(<%= link.user.reputation_value_for(:votes).to_i %>) 
<% end %> 
+0

這是有趣的。不知道這是一個選擇。謝謝! – umezo

1

您不妨考慮一個MVC的做法,把邏輯計算在模型中並從控制器調用它。

以這種方式,我會從模型開始。

我會考慮用戶,鏈接和投票模型。投票將是連接表,將需要遷移,將兩個外鍵添加到它(user_idlink_id),

User 
    has_many votes 
    has_many :links, :through => :votes 

Link 
    has_many_votes 
    has_many_users, :through => :votes 
    def votes_by_user 
    user.votes 
    end 

Vote 
    belongs_to :user 
    belongs_to :link 

然後在鏈路控制器我會

(在表演方法1個鏈接)

@link = Link.find(params[:id]) 

在Show View我會:

@link.users.each do |one_user|  
    link_to one_user, "#{link.user.name}(#{link.votes_by_user(one_user)}") 
end 

對於鏈接的索引方法,將它全部包含在一個迭代中,例如,

(索引方法)

@links=Link.all 

(視圖)

<%- @links.each do |one_link| %> 
    <%- one_link.users.each do |one_user| %> 
    <%= link_to one_user, "#{link.user.name}(#{link.votes_by_user(one_user)}") %> 
    <%- end %> 
<%- end %> 
+0

謝謝你的詳細的答案。我會考慮把膽量轉移到控制器上。我其實需要弄清楚如何首先構造字符串! – umezo