【问题标题】:Concatenate a variable and a link_to using HAML and Rails使用 HAML 和 Rails 连接变量和 link_to
【发布时间】:2020-08-21 16:29:15
【问题描述】:

我有一个有 2 列的表格:

%table.table.table-hover.table-striped.table-condensed
  %thead
    %tr
      %th= t('column.name1')
      %th= t('column.name2')
      %th
  %tbody
    %tr
      %td= "#{name1}" + link_to 'Details', name_path(@abc), class: 'btn btn-default btn-xs', id: 'name_details'
      %td= family_name

我需要显示name1 变量的值,并在其旁边显示link_to Details 作为同一%td 的一部分。

正如你在我的代码中看到的,我正在尝试这个:

%td= "#{name1}" + link_to 'Details', name_path(@abc), class: 'btn btn-default btn-xs', id: 'name_details'

但这给了我一个语法错误,并且不确定编写该行代码的正确方法/语法是什么。

提前非常感谢!

【问题讨论】:

  • 您是否尝试过将link_to 之后的所有内容都包裹在括号中:link_to('Details', name_path(@abc), class: 'btn btn-default btn-xs', id: 'name_details')
  • @user11350468 - 很公平。但是,OP 表示他们收到了语法错误。 OP 没有说明他们的链接呈现为文本而不是 HTML。正确的?我的评论旨在让 OP 思考 为什么 括号很重要以及在 哪些 上下文中。虽然您的答案可能会产生正确的结果(干得好,顺便说一句!!!),但字符串插值解决语法错误的原因可能并不完全清楚。

标签: ruby-on-rails frontend haml


【解决方案1】:

你可以用下面的字符串插值来实现它:

%td= "#{name1} #{link_to 'Details', name_path(@abc), class: 'btn btn-default btn-xs', id: 'name_details'}"

编辑#1


连接值时您将收到以下错误

SyntaxError - syntax error, unexpected tSTRING_BEG, expecting do or '{' or '('

您收到此异常是因为 ruby​​ 无法区分需要传递给方法 link_to 的所有参数。

正如异常提示和@jvillian 正确指出的那样,您可以用括号括起函数调用。

%td= name1 + link_to('Details', name_path(@abc), class: 'btn btn-default btn-xs', id: 'name_details')

两种方式拼接后返回的数据都会以字符串形式返回,默认不会html_escape。

您需要使用html_safe 显式转义

%td= name1 + link_to('Details', name_path(@abc), class: 'btn btn-default btn-xs', id: 'name_details')

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2014-09-29
    相关资源
    最近更新 更多