2017-05-08 1 views
0

Brauchen Sie Hilfe für Array-Einfügung in db mit Kontrollkästchen.In DB-Array-Checkbox-Rails einfügen

<% @companies.each do |company| %> 
    <%= check_box_tag 'company_name[]', company.company_name %> <%= company.id %> 
    <% end %> 

, wie diese Methode für dieses danken

def create 
     @ebookAssignedCompanies = EbookCompanyAssigned.create(ebook_company_assigned_param) 
     @ebookAssignedCompanies.save 
    end 

    private 

    def ebook_company_assigned_param  
    params.permit(company_name:[]) 
    end 

das Ergebnis in MySQL-Tabelle ist

+-------------+------------+ 
| id | company_name  | 
+-------------+------------+ 
| 1 | ["MHT, "PMT"]  | 
+-------------+------------+ 

ny gewünschte Ergebnis

+-------------+------------+ 
    | id | company_name  | 
    +-------------+------------+ 
    | 1 | MHT     | 
    | 2 | PMT     | 
    +-------------+------------+ 

bitte brauchen Hilfe in erstellen einfügen Sie

+0

Sie können diese eine Schleife über 'params mit tun [ 'company_name'] ' – Emu

Antwort

0
def create 
    @ebookCompanyAssigneds = [] 
    @errors = [] 
    params['company_name'].each do |cName| 
    eBookC = EbookCompanyAssigned.new(:company_name => cName) 
    if eBookC.valid? 
     @ebookCompanyAssigneds << eBookC.save 
    else 
     @errors += eBookC.errors 
    end 
    end 
end 
+0

das klappt auch sehr gut! – coolshox

+0

@coolshox, Es wird Ihnen die Fehler beim Erstellen der neuen Unternehmen sagen. Ich denke, es ist besser, dies zu tun. :) – Emu

+1

Ich bedanke mich bei allen für die Hilfe – coolshox

0

try unten Code:

def create 
    params["company_name"].each do |obj| 
     @ebookAssignedCompanies = EbookCompanyAssigned.new(company_name: obj) 
     @ebookAssignedCompanies.save 
    end 
end 
+0

Hi @ punnet18 zeigt Fehler undefined lokale Variable oder Methode' company_name ' – coolshox

+0

@ punnet18 Sie sparen mein Leben Dank sehr! – coolshox

+0

@coolshox akzeptieren und wählen Sie meine Antwort, wenn es für Sie funktioniert. Danke – puneet18

0

Wenn Sie schreiben

params.permit(company_name:[]) 

das ist ein Hash zurückgeben

{company_name: <Array of passing values>} 

das ist, warum Sie mit Array von Namen nur einen Datensatz erstellen innerhalb des Attributs company_name.

Wenn Sie stattdessen so viele Datensätze als Elemente in ‚company_name‘ params übergeben müssen erstellen sollten Sie schreiben:

def create 
    params.permit(company_name: [])[:company_name].each do |name| 
    EbookCompanyAssigned.create(company_name: name) 
    end 
end 

oder:

def create 
    array_of_hashes = params.permit(company_name: [])[:company_name] 
    .inject([]) { |array, name| array << {company_name: name} } 
    EbookCompanyAssigned.create(array_of_hashes) 
end 
+0

@DjezzL danke für die vollständige Erklärung. Ich werde dies zur Kenntnis nehmen. – coolshox