form_for,each和fields_for组合时出错

时间:2016-07-21 11:27:18

标签: ruby-on-rails haml form-for

我正在尝试创建一个包含要编辑的数据形式的表。但是,我收到以下错误:

syntax error, unexpected ')' at line 73

第73行是%tr.medium。我知道这不是问题的所在,我认为它是fields_for行,但我不确定为什么这会导致问题,因为我在网上以类似的例子为基础。

= form_for :campaign do
  - @campaigns.each do |campaign|
    = fields_for "campaign[]", campaign do |campaign_fields|
    %tr.medium
      %td= link_to campaign.name
      %td= campaign.status    
      %td
        -if ["New", "Updated"].include? campaign.status 
          = campaign_fields.check_box :status, {id: "#{campaign.id}", :class => "approvedservices"}, "Approved", ""
      %td{:style => "width:100px;"}
        -unless ["Rejected", "Approved"].include? campaign.status
          = campaign_fields.check_box :status, {id: "reject#{campaign.id}", :class => "rejectedservices"}, "Rejected", ""
      %td.notes{:style => "display: none"}
        = campaign_fields.text_field :notes, class: 'form-control mandatory', type: "input"
      %tr.medium
        %td.white{:colspan => 8}
        %td.white{:style => "width:100px;"}
          = campaign_fields.submit "Approve", :name => 'Commit'
        %td.white{:style => "width:100px;"}
          = campaign_fields.submit "Reject", :name => 'Reject'

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

%tr.medium并且后面的代码应该是这样的标签:

= fields_for "campaign[]", campaign do |campaign_fields|
  %tr.medium
    %td= link_to campaign.name

因为,HAML与Python类似,它根据其标签级别决定代码块“级别”。

答案 1 :(得分:1)

HAML严格来说是缩进所需的语言,所以当你错过缩进时就会出现错误,

= form_for :campaign do
  - @campaigns.each do |campaign|
    = fields_for "campaign[]", campaign do |campaign_fields|
      %tr.medium
        %td= link_to campaign.name
        %td= campaign.status    
        %td
          -if ["New", "Updated"].include? campaign.status 
            = campaign_fields.check_box :status, {id: "#{campaign.id}", :class => "approvedservices"}, "Approved", ""
        %td{:style => "width:100px;"}
          -unless ["Rejected", "Approved"].include? campaign.status
            = campaign_fields.check_box :status, {id: "reject#{campaign.id}", :class => "rejectedservices"}, "Rejected", ""
        %td.notes{:style => "display: none"}
          = campaign_fields.text_field :notes, class: 'form-control mandatory', type: "input"
      %tr.medium
        %td.white{:colspan => 8}
        %td.white{:style => "width:100px;"}
          = campaign_fields.submit "Approve", :name => 'Commit'
        %td.white{:style => "width:100px;"}
          = campaign_fields.submit "Reject", :name => 'Reject'

复制此缩进代码并尝试一次。