【问题标题】:link_to first name and last name as one linklink_to 名字和姓氏作为一个链接
【发布时间】:2017-09-25 12:22:18
【问题描述】:

我的名字和姓氏都链接到用户个人资料:

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

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

如何将名字和姓氏放在一个 link_to 中,以便在全名下划线?

【问题讨论】:

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


【解决方案1】:

将名称与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 魔法的另一个例子

= link_to @post.full_name, @post.user

如您所见,我省略了 user_path 助手,只传递了一个 @post.user 对象,Rails 能够在后台为我构建路径助手。

【讨论】:

  • 为代表加一个
  • 简单而伟大的解释!
  • 我有一些新东西要阅读,感谢您提供简单的解决方案!
【解决方案2】:

如果 first 或 last 可以为空,你可以这样做:

#app/models/user.rb

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多