在我的视图文件 (*.html.erb) 中,我想创建一个显示两个模型数据点(名称和投票数)的链接。对于有五票的 Bobby,它在图形上看起来像: Bobby(5)。
鉴于我要显示的字符串包含非红宝石括号,我如何使用 link_to 执行此操作?
在把它变成一个链接之前,代码是,
<%= user.name %>(<%= link.user.reputation_value_for(:votes).to_i %>)
非常感谢您的帮助!
在我的视图文件 (*.html.erb) 中,我想创建一个显示两个模型数据点(名称和投票数)的链接。对于有五票的 Bobby,它在图形上看起来像: Bobby(5)。
鉴于我要显示的字符串包含非红宝石括号,我如何使用 link_to 执行此操作?
在把它变成一个链接之前,代码是,
<%= user.name %>(<%= link.user.reputation_value_for(:votes).to_i %>)
非常感谢您的帮助!
link_to
能够接受块,例如:
<%= link_to user do %>
<%= user.name %>(<%= link.user.reputation_value_for(:votes).to_i %>)
<% end %>
尝试这个:
<%= 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(如果那是他的声誉值)给你
您可能希望考虑一种 MVC 方法,将计算逻辑放在模型中并从控制器调用它。
这样,我将从模型开始。
我会考虑用户、链接和投票模型。投票将是连接表,并且需要一个迁移,将两个外键添加到它(user_id
和link_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 %>