HAML и Stripe в form_for, я получаю ошибку компиляции. Что-то явно не так? - PullRequest
0 голосов
/ 23 декабря 2011

Я только что переключил свое приложение на рельсы 3.1 и ruby ​​1.9.Я также интегрирую Stripe через их API.Может быть, это вызывает проблемы?Я не могу понять на всю жизнь, в чем проблема с этой формой.Он говорит, что первая ошибка в строке 3 с оператором else (это ошибка компиляции, подробное описание ошибки ниже).Все отступы последовательны, я прошел построчно и исправил это.Дайте мне знать, если я должен опубликовать больше информации, например, мой gemfile или что-то еще.

Вот проблемный Форма:

=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...
                              ^

Спасибо всем

ОБНОВЛЕНИЕ 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, :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 Ответ

0 голосов
/ 23 декабря 2011

= операторы

Вы используете нотацию массива Javascript в HAML.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" }

Остальные операторы

Строки кода не производят вывод, поэтому используйте - вместо =

- if 
    %h1 Sign up
- else
    %h1 Edit
...