Ruby on rails HAML和Stripe的形式为,我不断得到一个编译错误。有什么明显的问题吗?

Ruby on rails HAML和Stripe的形式为,我不断得到一个编译错误。有什么明显的问题吗?,ruby-on-rails,ruby-on-rails-3,haml,Ruby On Rails,Ruby On Rails 3,Haml,我刚刚将应用程序切换到rails 3.1和ruby 1.9。我还通过他们的API集成了Stripe。也许这会引起问题? 我一辈子都搞不懂这个表格有什么问题。它说第一个错误在第3行的else语句中(这是一个编译错误,下面是完整的错误细节)。所有的缩进都是一致的,我一行一行地检查并修复了它。让我知道我是否应该发布更多信息,比如我的GEM文件或其他东西 下面是有问题的表单: =if %h1 Sign up =else %h1 Edit =form_for(@user) do |f|

我刚刚将应用程序切换到rails 3.1和ruby 1.9。我还通过他们的API集成了Stripe。也许这会引起问题? 我一辈子都搞不懂这个表格有什么问题。它说第一个错误在第3行的
else
语句中(这是一个编译错误,下面是完整的错误细节)。所有的缩进都是一致的,我一行一行地检查并修复了它。让我知道我是否应该发布更多信息,比如我的GEM文件或其他东西

下面是有问题的表单:

=if 
    %h1 Sign up
=else
    %h1 Edit
=form_for(@user) do |f|
    =render "shared/error_messages", :target => @user
    =f.hidden_field :stripe_card_token
    %dl
        =if signed_in?
            %dt.field=f.label :avatar
            %dd.field=f.file_field :avatar
        %dt.field=f.label :name
        %dd.field=f.text_field :name
        %dt.field=f.label :email
        %dd.field=f.text_field :email
        =if @user.new_record?
            %dt.field=f.label :password
            %dd.field=f.password_field :password
        =if @user.stripe_card_token.present?
            %p Credit card has been provided.
        =else
            %div.field
                =label_tag :card_number, "Credit Card Number"
                =text_field_tag :card_number, nil, name:nil
            %div.field
                =label_tag :card_code, "Security Code on Card (CVV)"
                =text_field_tag :card_code, nil, name:nil
            %div.field
                =label_tag :card_month, "Card Expiration"
                =select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"}
                =select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"}
            %div#stripe_error
                %noscript JavaScript is not enabled and is required for this form. First enable it in your web browser settings.
    .actions
        =f.submit((defined?(editing) ? "Update" : "Sign Up"))
compile error
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:3: syntax error, unexpected kELSE
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:23: syntax error, unexpected kELSE
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:25: syntax error, unexpected tSYMBEG, expecting kDO or '{' or '('
...d_tag :card_number, nil, name:nil
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:27: syntax error, unexpected tSYMBEG, expecting kDO or '{' or '('
...eld_tag :card_code, nil, name:nil
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: odd number list for Hash
...month nil, {add_month_numbers: true}, {name: nil, id: "card_...
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: syntax error, unexpected ':', expecting '}'
...month nil, {add_month_numbers: true}, {name: nil, id: "card_...
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: odd number list for Hash
...d_month_numbers: true}, {name: nil, id: "card_month"}
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: Can't assign to nil
...th_numbers: true}, {name: nil, id: "card_month"}
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: syntax error, unexpected ':', expecting '='
...umbers: true}, {name: nil, id: "card_month"}
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: syntax error, unexpected '}', expecting ')'
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:37: syntax error, unexpected kENSURE, expecting $end
...Util.html_safe(_erbout);ensure;@haml_buffer = @haml_buffer.u...
                              ^
=if 
    %h1 Sign up
=else
    %h1 Edit
=form_for(@user) do |f|
    =render "shared/error_messages", :target => @user
    =f.hidden_field :stripe_card_token
    %dl
        =if signed_in?
            %dt.field=f.label :avatar
            %dd.field=f.file_field :avatar
        %dt.field=f.label :name
        %dd.field=f.text_field :name
        %dt.field=f.label :email
        %dd.field=f.text_field :email
        =if @user.new_record?
            %dt.field=f.label :password
            %dd.field=f.password_field :password
        =if @user.stripe_card_token.present?
            %p Credit card has been provided.
        =else
            %div.field
                =label_tag :card_number, "Credit Card Number"
                =text_field_tag :card_number, :name =>  nil
            %div.field
                =label_tag :card_code, "Security Code on Card (CVV)"
                =text_field_tag :card_code, :name   => nil
            %div.field
                =label_tag :card_month, "Card Expiration"
                =select_month nil, {:add_month_numbers => true}, {:name => nil, :id => "card_month"}
                =select_year nil, {:start_year => Date.today.year, :end_year => Date.today.year+15}, {:name => nil, :id => "card_year"}
            %div#stripe_error
                %noscript JavaScript is not enabled and is required for this form. First enable it in your web browser settings.
    .actions
    =f.submit((defined?(editing) ? "Update" : "Sign Up"))
错误如下:

=if 
    %h1 Sign up
=else
    %h1 Edit
=form_for(@user) do |f|
    =render "shared/error_messages", :target => @user
    =f.hidden_field :stripe_card_token
    %dl
        =if signed_in?
            %dt.field=f.label :avatar
            %dd.field=f.file_field :avatar
        %dt.field=f.label :name
        %dd.field=f.text_field :name
        %dt.field=f.label :email
        %dd.field=f.text_field :email
        =if @user.new_record?
            %dt.field=f.label :password
            %dd.field=f.password_field :password
        =if @user.stripe_card_token.present?
            %p Credit card has been provided.
        =else
            %div.field
                =label_tag :card_number, "Credit Card Number"
                =text_field_tag :card_number, nil, name:nil
            %div.field
                =label_tag :card_code, "Security Code on Card (CVV)"
                =text_field_tag :card_code, nil, name:nil
            %div.field
                =label_tag :card_month, "Card Expiration"
                =select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"}
                =select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"}
            %div#stripe_error
                %noscript JavaScript is not enabled and is required for this form. First enable it in your web browser settings.
    .actions
        =f.submit((defined?(editing) ? "Update" : "Sign Up"))
compile error
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:3: syntax error, unexpected kELSE
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:23: syntax error, unexpected kELSE
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:25: syntax error, unexpected tSYMBEG, expecting kDO or '{' or '('
...d_tag :card_number, nil, name:nil
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:27: syntax error, unexpected tSYMBEG, expecting kDO or '{' or '('
...eld_tag :card_code, nil, name:nil
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: odd number list for Hash
...month nil, {add_month_numbers: true}, {name: nil, id: "card_...
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: syntax error, unexpected ':', expecting '}'
...month nil, {add_month_numbers: true}, {name: nil, id: "card_...
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: odd number list for Hash
...d_month_numbers: true}, {name: nil, id: "card_month"}
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: Can't assign to nil
...th_numbers: true}, {name: nil, id: "card_month"}
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: syntax error, unexpected ':', expecting '='
...umbers: true}, {name: nil, id: "card_month"}
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: syntax error, unexpected '}', expecting ')'
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:37: syntax error, unexpected kENSURE, expecting $end
...Util.html_safe(_erbout);ensure;@haml_buffer = @haml_buffer.u...
                              ^
=if 
    %h1 Sign up
=else
    %h1 Edit
=form_for(@user) do |f|
    =render "shared/error_messages", :target => @user
    =f.hidden_field :stripe_card_token
    %dl
        =if signed_in?
            %dt.field=f.label :avatar
            %dd.field=f.file_field :avatar
        %dt.field=f.label :name
        %dd.field=f.text_field :name
        %dt.field=f.label :email
        %dd.field=f.text_field :email
        =if @user.new_record?
            %dt.field=f.label :password
            %dd.field=f.password_field :password
        =if @user.stripe_card_token.present?
            %p Credit card has been provided.
        =else
            %div.field
                =label_tag :card_number, "Credit Card Number"
                =text_field_tag :card_number, :name =>  nil
            %div.field
                =label_tag :card_code, "Security Code on Card (CVV)"
                =text_field_tag :card_code, :name   => nil
            %div.field
                =label_tag :card_month, "Card Expiration"
                =select_month nil, {:add_month_numbers => true}, {:name => nil, :id => "card_month"}
                =select_year nil, {:start_year => Date.today.year, :end_year => Date.today.year+15}, {:name => nil, :id => "card_year"}
            %div#stripe_error
                %noscript JavaScript is not enabled and is required for this form. First enable it in your web browser settings.
    .actions
    =f.submit((defined?(editing) ? "Update" : "Sign Up"))
谢谢大家

更新1…不带javascript数组符号的新表单:

=if 
    %h1 Sign up
=else
    %h1 Edit
=form_for(@user) do |f|
    =render "shared/error_messages", :target => @user
    =f.hidden_field :stripe_card_token
    %dl
        =if signed_in?
            %dt.field=f.label :avatar
            %dd.field=f.file_field :avatar
        %dt.field=f.label :name
        %dd.field=f.text_field :name
        %dt.field=f.label :email
        %dd.field=f.text_field :email
        =if @user.new_record?
            %dt.field=f.label :password
            %dd.field=f.password_field :password
        =if @user.stripe_card_token.present?
            %p Credit card has been provided.
        =else
            %div.field
                =label_tag :card_number, "Credit Card Number"
                =text_field_tag :card_number, nil, name:nil
            %div.field
                =label_tag :card_code, "Security Code on Card (CVV)"
                =text_field_tag :card_code, nil, name:nil
            %div.field
                =label_tag :card_month, "Card Expiration"
                =select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"}
                =select_year nil, {start_year: Date.today.year, end_year: Date.today.year+15}, {name: nil, id: "card_year"}
            %div#stripe_error
                %noscript JavaScript is not enabled and is required for this form. First enable it in your web browser settings.
    .actions
        =f.submit((defined?(editing) ? "Update" : "Sign Up"))
compile error
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:3: syntax error, unexpected kELSE
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:23: syntax error, unexpected kELSE
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:25: syntax error, unexpected tSYMBEG, expecting kDO or '{' or '('
...d_tag :card_number, nil, name:nil
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:27: syntax error, unexpected tSYMBEG, expecting kDO or '{' or '('
...eld_tag :card_code, nil, name:nil
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: odd number list for Hash
...month nil, {add_month_numbers: true}, {name: nil, id: "card_...
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: syntax error, unexpected ':', expecting '}'
...month nil, {add_month_numbers: true}, {name: nil, id: "card_...
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: odd number list for Hash
...d_month_numbers: true}, {name: nil, id: "card_month"}
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: Can't assign to nil
...th_numbers: true}, {name: nil, id: "card_month"}
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: syntax error, unexpected ':', expecting '='
...umbers: true}, {name: nil, id: "card_month"}
                              ^
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:30: syntax error, unexpected '}', expecting ')'
/Users/brianjoseff/rails_projects/groupie/app/views/users/_form.html.haml:37: syntax error, unexpected kENSURE, expecting $end
...Util.html_safe(_erbout);ensure;@haml_buffer = @haml_buffer.u...
                              ^
=if 
    %h1 Sign up
=else
    %h1 Edit
=form_for(@user) do |f|
    =render "shared/error_messages", :target => @user
    =f.hidden_field :stripe_card_token
    %dl
        =if signed_in?
            %dt.field=f.label :avatar
            %dd.field=f.file_field :avatar
        %dt.field=f.label :name
        %dd.field=f.text_field :name
        %dt.field=f.label :email
        %dd.field=f.text_field :email
        =if @user.new_record?
            %dt.field=f.label :password
            %dd.field=f.password_field :password
        =if @user.stripe_card_token.present?
            %p Credit card has been provided.
        =else
            %div.field
                =label_tag :card_number, "Credit Card Number"
                =text_field_tag :card_number, :name =>  nil
            %div.field
                =label_tag :card_code, "Security Code on Card (CVV)"
                =text_field_tag :card_code, :name   => nil
            %div.field
                =label_tag :card_month, "Card Expiration"
                =select_month nil, {:add_month_numbers => true}, {:name => nil, :id => "card_month"}
                =select_year nil, {:start_year => Date.today.year, :end_year => Date.today.year+15}, {:name => nil, :id => "card_year"}
            %div#stripe_error
                %noscript JavaScript is not enabled and is required for this form. First enable it in your web browser settings.
    .actions
    =f.submit((defined?(editing) ? "Update" : "Sign Up"))
=声明 您正在HAML中使用Javascript数组表示法。HAML使用Ruby计算=(表达式):

所以这是错误的:

= select_month nil, {add_month_numbers: true}, {name: nil, id: "card_month"}
应该是:

= select_month nil, { :add_month_numbers => true}, { :name => nil, id => "card_month" }
Else语句 代码行不产生输出,所以使用-而不是=

- if 
    %h1 Sign up
- else
    %h1 Edit

好的,错误的数量已经减少了,但是我仍然在第三行得到
编译错误
语法错误,意外的kELSE
。我已经编辑了这个问题,包括编辑过的表单,去掉了javascript数组notationupdated答案——movember每年都会留胡子一次(不允许留到12月)啊,这就成功了,出于某种原因,我错误地认为在rails 3.1中,haml中的所有内容都应该使用等号。不幸的是,注重细节不是我的强项。thakns对于helpNah来说,他们实际上只是改变了form_标记的工作方式——它以前是不一致的。我刚刚发现的另一件事——你原来的哈希符号是正确的——例如,在Ruby 1.9中,{注意:'hello'}和{:注意=>'hello'}是一样的