Ruby on rails Rails助手方法,将链接到选项作为选项

Ruby on rails Rails助手方法,将链接到选项作为选项,ruby-on-rails,ruby,methods,link-to,helpermethods,Ruby On Rails,Ruby,Methods,Link To,Helpermethods,我正在尝试创建一个helper方法,该方法可以为link_to方法提供可选参数。我的目的是为不同的情况创建一个助手方法: # Typical case #1 (can have any number of extra arguments) <%= toolbar_item('google.com', 'Google', 'globe', 'btn-primary', target: '_blank') %> # Typical case #2 (extra arguments ar

我正在尝试创建一个helper方法,该方法可以为link_to方法提供可选参数。我的目的是为不同的情况创建一个助手方法:

# Typical case #1 (can have any number of extra arguments)
<%= toolbar_item('google.com', 'Google', 'globe', 'btn-primary', target: '_blank') %>

# Typical case #2 (extra arguments are optional)
<%= toolbar_item(root_path, 'Start', 'flag', 'btn-primary') %>
#典型案例#1(可以有任意数量的额外参数)
#典型案例#2(额外参数可选)
遵循代码:

def toolbar_item(url,text,icon,custom_class, optional_extra_settings = {})
  link_to raw("<i class='fa fa-#{icon}'></i> #{text}"), url, class: custom_class, optional_extra_settings
end
def工具栏\项(url、文本、图标、自定义\类、可选\额外\设置={})
链接到原始(“{text}”)、url、类:自定义类、可选额外设置
结束
这不好。link\u to方法无法识别额外的\u设置并引发错误

有什么想法吗?
谢谢

不要重新发明轮子。CSS类是一个可以通过选项散列传递给助手的选项。让我们将其移动到选项散列并删除一个不必要的参数

# notice class: 'btn-primary' vs 'btn-primary'
<%= toolbar_item(..., class: 'btn-primary', target: '_blank') %>
现在,每次使用带有图标的辅助对象时,都可以指定所需的图标:

<%= toolbar_item 'google.com', class: 'btn-primary' do %>
  <%= content_tag :i, class: 'globe' %> Google
<% end %>

谷歌
这就引出了一个问题。你真的需要一个帮手吗?我们所做的只是创建一个包装器。您只需执行以下操作:

<%= link_to 'Google', 'google.com', class: 'btn-primary' %>

<%= link_to 'Google', class: 'btn-primary' do %>
  <%= content_tag :i, class: 'globe' %> Google
<% end %>

谷歌
该方法只接受3个参数。最后一个参数必须是散列。因此,您必须将类设置与可选的额外设置哈希合并

将示例更改为:

def toolbar_item(url, text, icon, custom_class, optional_extra_settings = {})
  html_options = { class: custom_class }.merge(optional_extra_settings)
  link_to raw("<i class='fa fa-#{h icon}'></i> #{h text}"), url, html_options
end
def工具栏\项(url、文本、图标、自定义\类、可选\额外\设置={})
html_options={class:custom_class}.merge(可选的额外设置)
链接到原始(“{h text}”)、url、html选项
结束

此外,您会注意到我使用了
h
来转义您的
图标
文本
。为了安全起见,因为您使用
raw

禁用了通常由Rails完成的自动转义,所以它也很好地工作了!正如你们所解释的,我对原始link_to方法的选项散列做了错误的处理,但现在已经很清楚了。回答你的问题,如果我真的需要这个方法:是的,我需要,所以我可以在一个地方更改整个应用程序中工具栏itens的样式和属性。
def toolbar_item(url, text, icon, custom_class, optional_extra_settings = {})
  html_options = { class: custom_class }.merge(optional_extra_settings)
  link_to raw("<i class='fa fa-#{h icon}'></i> #{h text}"), url, html_options
end