2016-10-31 3 views
0

Ich brauche ein Formular, das 1 Radio-Button, 1 Absenden-Taste und ein Kontrollkästchen für jeden aufgeführten Artikel enthält.Mehrere speichert mit einem Senden

Nach dem Senden sollte das Formular einen separaten Datensatz für jedes überprüfte Element speichern. Jedes gespeicherte Element sollte den Wert des Optionsfelds zusammen mit anderen ausgeblendeten Werten enthalten.

Das Formular rendert, stürzt aber beim Senden ab. Die Fehlermeldung lautet:

undefined method `permit' for #<Array:0x007fb4b3b1a520> 

Mein Code ist:

 <%= form_tag(controller: "handoffs", action: "create", method: "post") %> 
      <%= radio_button_tag(:attend, "arrive") %> 
      <%= label(:handoff_arrive, "drop-off") %> 
      <%= radio_button_tag(:attend, "depart") %> 
      <%= label(:handoff_depart, "pick-up") %> 

      <% @parent.children.each do |child| %> 
       <%= check_box_tag "handoff[][check]" %> 
       <strong> 
       <%= child.fname %> 
       <%= child.mname %> 
       <%= child.lname %> 
       </strong><br> 

       <% group = Group.find(child.group_id) %> 

       <%= hidden_field_tag "handoff[][attend]" %> 
       <%= hidden_field_tag "handoff[][group_name]", :value => group.name %> 
       <%= hidden_field_tag "handoff[][child_id]", :value => child.id %> 
       <%= hidden_field_tag "handoff[][center_id]", :value => @center.id %> 
       <%= hidden_field_tag "handoff[][escort_fname]", :value => @parent.fname %> 
       <%= hidden_field_tag "handoff[][escort_lname]", :value => @parent.lname %> 
       <%= hidden_field_tag "handoff[][child_fname]", :value => child.fname %> 
       <%= hidden_field_tag "handoff[][child_mname]", :value => child.mname %> 
       <%= hidden_field_tag "handoff[][child_lname]", :value => child.lname %> 
      <% end %> 
      <%= button_to :submit, :class => 'f_submit' %> 
     <% end %> 

Aktionen Controller:

def new 
    @handoff = Handoff.new 
    @parent = current_parent 
    @center = Center.find(@parent.center_id) 
    end 

    def create 
    params["handoff"].each do |handoff| 
     if params[:handoff["check"]] != "" 
     @handoff = Handoff.new(handoff_params) 
     @handoff.save 
     end 
    end 
    end 

    def handoff_params 

    params.require(:handoff).permit(:attend, :group_name, :child_id, :center_id, :escort_fname, :escort_lname, :child_fname, :child_mname, :child_lname) 
    end 

Anforderungsparameter (in Fehlerbericht)

{"utf8"=>"✓", 
"authenticity_token"=>"snqrS130bXNV4bmMHOMlXeyhX2rWFVpmY/PYIv0jn97MBOLSWWw2jBbeYGPyjt7O9l5pRVNuFiu1qOwkGpELTA==", 
"attend"=>"depart", "handoff"=>[{"check"=>"1", "attend"=>"", 
"group_name"=>"{:value=>\"Gifted\"}", "child_id"=>"{:value=>60}", 
"center_id"=>"{:value=>4}", "escort_fname"=>"{:value=>\"Richard\"}", 
"escort_lname"=>"{:value=>\"Messing\"}", 
"child_fname"=>"{:value=>\"Aaron\"}", 
"child_mname"=>"{:value=>\"Lawrence\"}", 
"child_lname"=>"{:value=>\"Schwartz\"}"}, {"check"=>"1", "attend"=>"", 
"group_name"=>"{:value=>\"Arts & Crafts\"}", 
"child_id"=>"{:value=>61}", "center_id"=>"{:value=>4}", 
"escort_fname"=>"{:value=>\"Richard\"}", 
"escort_lname"=>"{:value=>\"Messing\"}", 
"child_fname"=>"{:value=>\"Joseph\"}", 
"child_mname"=>"{:value=>\"Michael\"}", 
"child_lname"=>"{:value=>\"Messing\"}"}], "method"=>"post", 
"controller"=>"handoffs", "action"=>"create"} 
+0

ich das Problem gelöst. Fall abgeschlossen. – Rick

Antwort

0

Ich hatte ähnliche Fall. Zuerst müssen Sie ein Array mit allen Werten erstellen, die Sie exportieren möchten. Ich habe helper dafür verwendet. Ich werde Ihnen mein Beispiel zeigen:

def get_table_of_keywords(keywords) 
    exact_keywords = [] 
    keyword_array.each do |key| 
     if !key.blank? 
     exact_keywords << {keyword: key, created_at: DateTime.now.in_time_zone, updated_at: DateTime.now.in_time_zone } 
     end 
    end 
    exact_keywords 
    end 

Und Sie erstellen verwenden:

@inserted_keywords = @campaign.keywords.create(get_table_of_keywords(params[:keyword][:keyword])) # add new keywords to the list 
+0

Vielen Dank für Ihr Feedback. Ich habe [] Klammern in der Form field_tags (handoff [] ...), um ein Array von Hashes in params zu erstellen. Der Fehlerbericht zeigt, dass das Array erstellt wird. Aber ich glaube nicht, dass mein Code in der Erstellungsaktion korrekt auf das Array zugreift. Und ich verstehe nicht, warum ich den Fehler bekomme: "undefined method permit". – Rick

Verwandte Themen