如何创建帮助方法HAML

时间:2015-07-13 01:14:20

标签: ruby-on-rails ruby-on-rails-3 twitter-bootstrap devise haml

我继承了一个使用Ruby on Rails和HAML的项目,我之前从未见过HAML,所以我有点困惑。这个项目正在使用设计来处理用户并设计发送flash事件或者某些东西,以便在用户登录或用户登录失败以及其他类似事件时通知。我的问题是闪存通知被硬编码为某些类型,我想通过一些自定义将它们绑定到引导警报。我知道我可以编辑设计通知的文本,但我无法更改其类型。我有一个部分文件,用于显示警报。

- if flash[:error]
  .alert.alert-error
    %button.close{"data-dismiss" => "alert", :type => "button"} ×
    = flash[:error].html_safe
- elsif flash[:alert]
  .alert.alert-error
    %button.close{"data-dismiss" => "alert", :type => "button"} ×
    = flash[:alert]
- elsif flash[:notice]
  .alert.alert-warning
    %button.close{"data-dismiss" => "alert", :type => "button"} ×
    = flash[:notice]
- elsif flash[:success]
  .alert.alert-success
    %button.close{"data-dismiss" => "alert", :type => "button"} ×
    = flash[:success]

我想要做的是在设计字符串前加上我希望它们的警报类型。

拿这个

Successful log in!

然后把它变成这个

alert-info|Successful log in!

然后解析alter类型并更改字符串。我不知道是否可以使用辅助方法。

1 个答案:

答案 0 :(得分:1)

= flash[:success]是ERB的<%= flash[:success] %>

的HAML等价物

了解这一点,您可以使用普通的ruby代码来编写您想要显示的内容。另外,要在HAML中编写简单文本,只需将其放在自己的行上(保持适当的缩进):

- if flash[:success]
  .alert.alert-success
    %button.close{"data-dismiss" => "alert", :type => "button"} &times;
    My custom text
    = flash[:success]

这将转换为:

<% if flash[:success] %>
  <div class="alert alert-success">
    <button class="close" data-dismiss="alert" type="button">&times;</button>
    My custom text
    <%= flash[:success] %>
  </div>
<% end %>

请注意我在上面的两个代码示例中放置了“我的自定义文字”

有关了解HAML疯狂的其他帮助,请参阅:HAML DocumentationOnline HAML Conversion Tool

<强>更新

如果您想要解析flash字符串并根据前缀显示div,请创建一个这样的帮助器:

# application_helper.rb
def display_flash(input_message)
  if input_message
    # Split the prefix from the actual message
    prefix, output_message = input_message.split('|')

    # Use HAML's haml_tag to create your div, button, etc.
    haml_tag(:div, class: "alert #{prefix}") do
      output_message
    end
  end
end

希望这比以前更接近于解决您的问题。别的我知道了。