2015-06-18 43 views
13

錯誤嵌套的屬性:增加與軌道4複選框使用質量分配

param is missing or the value is empty: color 

我想提出一個形式,我可以給父記錄添加嵌套屬性,我想通過複選框來添加。我有父模型「汽車」和孩子模型「顏色」...但我想從一些默認的「顏色」開始......所以我也有模型「Sample_Colors」,它根據「Car_Models」而改變。

我想使用複選框將多個「顏色」添加到關聯的「汽車」......我不想與「Sample_Colors」和「顏色」建立HABTM關係,因爲我需要「顏色」記錄可編輯,而不僅僅是一個連接表。我已經使用HABTM完成了這個工作,所以我不明白爲什麼我不能以類似的方式創建非連接表記錄。

如果我有麻煩與質量分配...,要麼拋出上述錯誤或無法找到colors_id ...

澄清我想要做的事:

複選框需要
1.創建與@car記錄父級關聯的新「彩色」記錄(@ color.new)
2.將@ color.new記錄的「value_one」列設置爲sample_color.value_one值
3.將@ color.new記錄的「value_two」列設置爲sample_color.value_two值

4.創建的複選框的數量==迭代的@sample_colors。

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(添加顏色)

<%= 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

請讓我知道如何改善問題。我很新鮮,我不想用很差的問題堵塞Stackoverflow,但有時我不知道爲什麼它不好。我在這個問題上構建了一個示例應用程序,以儘可能詳盡地描述它......這一直困擾我一週。 – NothingToSeeHere

回答

2

你可以嘗試更換:

<% @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 %> 

隨着collection_check_boxes

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

我不完全確定這是正確的,但它應該是朝着正確方向邁出的一步。讓我知道事情的後續。

+0

嗯......它給了我「未定義的方法'value_two'爲# 」......也許這意味着你不能將多個隱藏字段摺疊成一個checkbox_collection?我試着使用:value_one ...你甚至可以用一個複選框設置多個列值? – NothingToSeeHere

+0

我並不完全相信我明白爲什麼要這麼做,但我更新了它,所以您至少應該爲每種顏色都選中一個複選框。 :)如果我在這裏很密集,我很抱歉,但是一旦您向汽車物體添加了顏色ID,您是否能夠通過顏色關係獲取顏色值?再次,爲我的誤解感到抱歉。 –

+0

...我想做一些奇怪的事情...我想每個'sample_color'迭代都有一個check_box,並檢查這個盒子是否創建了一個新的'color'記錄:id,:value_one &sample_color.value_one說)和:value_two(sample_color.value_two說什麼)。顏色表不是連接...我只需要一種方法來從sample_color.value one和sample_color.value_two的相應模板創建color.value_one和color.value_two。 – NothingToSeeHere