2015-06-18 12 views
13

Fehler mit:verschachtelte Attribute mit Kontrollkästchen in Schienen Zugabe von 4 Massenzuordnung

param is missing or the value is empty: color 

ich ein Formular mache, wo ich verschachtelte Attribute zu einem übergeordneten Datensatz hinzufügen können, und ich möchte sie durch Kontrollkästchen hinzuzufügen. Ich habe das Elternmodell "Car" und das Kindmodell "Colors" ... aber ich möchte mit einigen Standardfarben beginnen ... also habe ich auch das Modell "Sample_Colors", das sich basierend auf den "Car_Models" ändert.

ich mehr „Farben“ zu einem zugehörigen „Car“ mit Kontrollkästchen hinzufügen versuchen ... Ich will nicht eine HABTM Beziehung mit „Sample_Colors“ und „Farben“, wie ich die „Farben“ Rekord sein muß editierbar und nicht nur eine Join-Tabelle. Ich habe dies mit HABTM gemacht, und deshalb verstehe ich nicht wirklich, warum ich keinen Nicht-Join-Tabellendatensatz auf ähnliche Weise erstellen kann.

Wo ich Probleme habe, ist mit den Massenzuweisungen ... es entweder wirft den Fehler oben oder kann die colors_id nicht finden ...

zu klären, was ich versuche zu tun:
erstellen
die Kontrollkästchen müssen
1. eine neue „Farbe“ Record (@ color.new), die mit dem @car Datensatz Mutter
2. Stellen Sie die „value_one“ Spalte des @ color.new Datensatz zugeordnet ist, sample_color.value_one
3. Setzen Sie die Spalte "value_two" des @ color.new-Datensatzes auf den Wert sample_color.value_two

4. Die Anzahl der Checkboxen, die erstellt werden == die @sample_colors, die iteriert werden.

car_model.rb

class CarModel 
has_many :sample_colors, dependent: :destroy 
has_many :cars, dependent: :destroy 

car.rb

class Car 
has_many :colors, dependent: :destroy 
belongs_to :car_model 
accepts_nested_attributes_for :colors, allow_destroy: true 

sample_color.rb

class SampleColor 
belongs_to :car_model 

color.rb

class Color 
belongs_to :car 
accepts_nested_attributes_for :finishes, allow_destroy: true 

_form (für das Hinzufügen von Farben)

<%= form_for @car do |f| %> 

    <%= f.fields_for 'car[color_attributes][]', @color, index: nil do |f| %> 

<label class="form-label dk-aqua">Colors for <%= @car.car_name %></label><br> 
<div class="row "> 

<%= hidden_field_tag "car[color_ids][]", nil %> 
<% @sample_colors.each do |sample_color| %> 
    <%= check_box_tag "car[color_ids][]", "#{sample_color.id}" %> 
    <%= hidden_field_tag "car[color_value_ones][]", "#{sample_color.value_one}" %> 
    <%= hidden_field_tag "car[color_value_twos][]", "#{sample_color.value_two}" %> 
    <%= label_tag :value_one, "#{sample_color.value_one}" %> <br> 

<% end %> 
</div> 
<% end %> 

    <%= f.submit 'SAVE CHANGES', :class => 'btn btn-green btn-lg btn-block' %> 
    <%end%> 

cars_controller.rb

def update 
    @color = Color.new(color_params) 
    @car.color_ids = params[:car][:color_ids] || [] 
    @car.color_value_ones = params[:car][:color_value_ones] || [] 
    @car.color_value_twos = params[:car][:color_value_twos] || [] 
     respond_to do |format| 
     if @car.update(car_params) 
     format.html { redirect_to @car, notice: 'Car was successfully updated.' } 
     format.json { render :show, status: :ok, location: @car } 
     else 
     format.html { render :edit } 
     format.json { render json: @car.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def car_params 
    params.require(:car).permit(:id, :car_name, :car_model_id, colors_attributes: [:id, {:color_ids => [], :color_value_ones => [], :color_value_twos => []}, :value_one, :value_two, 
    finishes_attributes: [:id, :value_one] ] ) 
end 

def color_params 
    params.require(:color).permit(:id, {:color_ids => [], :color_value_ones => [], :color_value_twos => []}, :value_one, :value_two, 
    finishes_attributes: [:id, :value_one] ) 
end 
+0

Bitte lassen Sie mich wissen, wie ich eine Frage verbessern kann. Ich bin neulich und ich möchte Stackoverflow nicht mit schlechten Fragen verstopfen, aber manchmal weiß ich nicht genug, um zu wissen, warum es schlecht ist. Ich habe eine Beispiel-App erstellt, um so gründlich wie möglich zu dieser Frage zu sein ... die mich eine Woche lang verfolgt hat. – NothingToSeeHere

Antwort

2

Sie ersetzen könnten versuchen:

<% @sample_colors.each do |sample_color| %> 
    <%= check_box_tag "car[color_ids][]", "#{sample_color.id}" %> 
    <%= hidden_field_tag "car[color_value_ones][]", "#{sample_color.value_one}" %> 
    <%= hidden_field_tag "car[color_value_twos][]", "#{sample_color.value_two}" %> 
    <%= label_tag :value_one, "#{sample_color.value_one}" %> <br> 

<% end %> 

Mit collection_check_boxes:

<%= f.collection_check_boxes(:color_ids, @sample_colors, :id, :value_one) %> 

Ich bin mir nicht ganz sicher, ob das stimmt, aber es sollte ein Schritt in die richtige Richtung sein. Lass mich wissen wie es geht.

+0

Hmmm ... es gibt mir "undefined Methode' value_two 'für # "... vielleicht bedeutet dies, dass Sie nicht mehrere versteckte Felder in eine checkbox_collection falten können? Ich habe versucht, nur mit: value_one ... können Sie sogar mehrere Spaltenwerte mit einem Kontrollkästchen setzen? – NothingToSeeHere

+0

Ich bin mir nicht ganz sicher, warum ich das verstehe, aber ich habe es aktualisiert, also sollten Sie zumindest eine Checkbox für jede Farbe bekommen. :) Es tut mir leid, wenn ich hier dicht bin, aber sollten Sie nicht in der Lage sein, die Farbwerte durch die Farbbeziehung zu erhalten, wenn Sie dem Auto-Objekt die Farb-IDs hinzugefügt haben? Nochmals, Entschuldigung für mein Missverständnis. –

+0

... Ich versuche etwas seltsames zu tun ... Ich möchte 1 check_box für jede 'sample_color'-Iteration haben und prüfen, ob diese Box einen neuen' color'-Datensatz mit der folgenden ID erstellt: id,: value_one (was die Bezeichnung ist & sample_color.value_one sagt) und: value_two (was sample_color.value_two sagt). Die Farbtabelle ist kein Join ... Ich brauche nur eine Möglichkeit, um color.value_one und color.value_two aus den entsprechenden Vorlagen von sample_color.value one und sample_color.value_two zu erstellen. – NothingToSeeHere

Verwandte Themen