标记a从erb到Haml

时间:2015-10-13 07:05:51

标签: ruby-on-rails haml

我有haml中的下一个代码,显示错误:显示/home/ubuntu/workspace/app/views/layouts/application.html.haml第24行引发:非法嵌套:内容无法解决两者都与%a在同一行上给出并嵌套在其中。

第24行是 = current_user.name haml代码有什么问题?

!!!
%html
  %head
    %title Chat
    = stylesheet_link_tag
    = javascript_include_tag
    = csrf_meta_tags

  %body
    %div.navbar.navbar-default.navbar-static-top
      .container   
        .navbar-header
          = link_to 'Chat', root_path, class: 'navbar-brand'

      .navbar
        %ul.nav.navbar-nav
          %li
            = link_to 'Home', root_path

        %ul.nav.navbar-nav.pull-right
          - if user_signed_in?
            %li.dropdown
              %a.dropdown-toggle {"data-toggle": "dropdown", href: "#"}
                = current_user.name    
              %ul.dropdown-menu {role: "menu">
                %li
                  = link_to 'Profile', edit_user_registration_path
                %li 
                  = link_to 'Log out', destroy_user_session_path, method: :delete
          - else
            %li
              = link_to 'Log In', new_user_session_path
            %li
              = link_to 'Sign Up', new_user_registration_path


    .container
      = flash.each do |key, value|
        %div.alert.alert-"#{key}"
          = value

      = yield

  %footer  
    %p Copyright © #{Time.now.year}

2 个答案:

答案 0 :(得分:1)

尝试以下方法:

$(document).ready(function () { //call function here })

或者,您调用Rails的%a.dropdown-toggle{data-toggle: "dropdown", href: "#"} = current_user.name 帮助程序以使其正常运行:

link_to
  

与%a在同一行给出并嵌套在其中

错误基本上意味着HAML会在您的= link_to current_user.name, "#", data: {toggle: "dropdown"}, class: "dropdown-toggle" .dropdown-toggle之间处理您的空间,作为链接标记的“内容”。

当您在下面的行中声明{时,对于在链接的“内容”中显示哪一个感到困惑

关于您的错误,以下是我如何格式化页面:

= current_user

一些指示:

  1. 您无需声明!!! %html %head %title Chat = stylesheet_link_tag = javascript_include_tag = csrf_meta_tags %body .navbar.navbar-default.navbar-static-top .container .navbar-header = link_to 'Chat', root_path, class: 'navbar-brand' .navbar %ul.nav.navbar-nav %li= link_to 'Home', root_path %ul.nav.navbar-nav.pull-right - if user_signed_in? %li.dropdown = link_to current_user.name, "#", data: {toggle: "dropdown"}, class: "dropdown-toggle" %ul.dropdown-menu{data-role: "menu"} %li= link_to 'Profile', edit_user_registration_path %li= link_to 'Log out', destroy_user_session_path, method: :delete - else %li= link_to 'Log In', new_user_session_path %li= link_to 'Sign Up', new_user_registration_path .container = flash.each do |key, value| .alert.alert-"#{key}" = value = yield %footer %p Copyright © #{Time.now.year} - 只需使用%div即可自动创建.css_class

  2. HAML基本上就像一个巨大的div脚本 - 它以不同的方式处理代码中的每个细微差别。对于内联嵌套内容尤其如此。

  3. 如果您只有一行,则无需嵌套内容

    markdown

    如果你有多行,你需要保持初始代码没有空格:

    .alert.alert-"#{key}"= value
    

答案 1 :(得分:1)

将第23行更改为

%a.dropdown-toggle{"data-toggle": "dropdown", href: "#"}