link_to名字和姓氏作为一个链接

时间:2017-04-27 15:42:41

标签: ruby-on-rails ruby hyperlink link-to

我有名字和姓氏,它们都链接到用户个人资料:

= link_to (@post.user.fname), user_path(@post.user_id) 
= link_to (@post.user.lname), user_path(@post.user_id)

这是两个单独的链接。当我将鼠标悬停在第一个名称上时,它只突出显示第一个名称。反之亦然。 (示例只是一个随机生成的名称)

如何将名字和姓氏设为一个link_to,以便强调全名?

enter image description here

2 个答案:

答案 0 :(得分:11)

使用string interpolation加入姓名:

= link_to "#{@post.user.fname} #{@post.user.lname}", user_path(@post.user_id)

有一个更好的解决方案,在用户模型中添加一个返回全名的方法。

#app/models/user.rb

def full_name
  "#{fname} #{lname}"
end

并在link_to帮助器中使用它:

 = link_to @post.user.full_name, user_path(@post.user_id)

还有另一种解决方案,使用delegate方法,这是一个例子:

#app/models/post.rb

# Obviously post belongs to user
belongs_to :user
delegate :full_name, to: :user
# which means if the `full_name` method 
# invokes on the @post model `delegate` it to user

用法:

= link_to @post.full_name, user_path(@post.user_id)

以下是 Rails magic 的另一个例子:

= link_to @post.full_name, @post.user

正如您所看到的,我省略了user_path帮助程序并只传递了一个@post.user对象,Rails能够为我构建路径帮助程序。

答案 1 :(得分:0)

如果第一个或最后一个可以为空白,则可以执行以下操作:

#app/models/user.rb

def full_name
  [fname.presence, lname.presence].compact.join(' ')
end