0

在我的视图文件 (*.html.erb) 中,我想创建一个显示两个模型数据点(名称和投票数)的链接。对于有五票的 Bobby,它在图形上看起来像: Bobby(5)

鉴于我要显示的字符串包含非红宝石括号,我如何使用 link_to 执行此操作?

在把它变成一个链接之前,代码是,

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

非常感谢您的帮助!

4

3 回答 3

1

link_to能够接受块,例如:

<%= link_to user do %>
    <%= user.name %>(<%= link.user.reputation_value_for(:votes).to_i %>)
<% end %> 
于 2012-09-16T15:07:19.877 回答
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(如果那是他的声誉值)给你

鲍比(8)

于 2012-09-16T15:07:49.867 回答
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])

在显示视图中,我将拥有:

@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 %>
于 2012-09-16T15:08:47.023 回答