link_to first name and last name as one link

Big*_*igL 0 ruby ruby-on-rails hyperlink link-to

I have the first name and last name which both link to the users profile:

= link_to (@post.user.fname), user_path(@post.user_id) 
= link_to (@post.user.lname), user_path(@post.user_id)
Run Code Online (Sandbox Code Playgroud)

These are two separate links. When I hover the mouse over the first name it only highlights the first name. And vice versa. (Example is just a randomly generated name)

How do I make the first name and last name one single link_to so it underlines the full name?

enter image description here

Зел*_*ный 11

加入姓名string interpolation:

= link_to "#{@post.user.fname} #{@post.user.lname}", user_path(@post.user_id)
Run Code Online (Sandbox Code Playgroud)

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

#app/models/user.rb

def full_name
  "#{fname} #{lname}"
end
Run Code Online (Sandbox Code Playgroud)

并在link_to帮助器中使用它:

 = link_to @post.user.full_name, user_path(@post.user_id)
Run Code Online (Sandbox Code Playgroud)

还有另一个解决方案,使用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
Run Code Online (Sandbox Code Playgroud)

用法:

= link_to @post.full_name, user_path(@post.user_id)
Run Code Online (Sandbox Code Playgroud)

这是Rails魔法的另一个例子:

= link_to @post.full_name, @post.user
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我省略了user_path助手,只是传递了一个@post.user对象,Rails能够为我构建路径助手.