2015-06-18 29 views
13

lỗi:thêm các thuộc tính lồng nhau với hộp kiểm trong đường ray 4 sử dụng phân khối

param is missing or the value is empty: color 

Tôi đang làm cho một hình thức mà tôi có thể thêm các thuộc tính lồng nhau đến mức kỷ lục phụ huynh và tôi muốn thêm chúng thông qua hộp kiểm. Tôi có mô hình "Car" và mô hình con "Colors" ... nhưng tôi muốn bắt đầu với một số "màu sắc" mặc định ... vì vậy tôi cũng có mẫu "Sample_Colors", thay đổi dựa trên "Car_Models".

Tôi đang cố thêm nhiều "Màu" vào ô "Ô tô" được kết hợp bằng hộp kiểm ... Tôi KHÔNG muốn mối quan hệ HABTM với "Sample_Colors" và "Colors", vì tôi cần bản ghi "Màu sắc" có thể chỉnh sửa và không chỉ là bảng tham gia. Tôi đã làm điều này bằng cách sử dụng HABTM, và vì vậy tôi không thực sự hiểu tại sao tôi không thể tạo một bản ghi không tham gia một cách tương tự.

Nơi tôi đang gặp rắc rối là với các bài tập hàng loạt ... nó hoặc ném các lỗi trên hoặc không thể tìm thấy colors_id ...

để làm rõ những gì tôi đang cố gắng để làm:

Các hộp kiểm cần
1. Tạo bản ghi "Màu" mới (@ color.new) được liên kết với phụ huynh bản ghi @car
2. Đặt cột "value_one" của bản ghi @ color.new thành giá trị sample_color.value_one
3. Đặt cột "value_two" của bản ghi @ color.new thành sample_color.value_two value

4. Số lượng hộp kiểm được tạo == @sample_colors được lặp lại.

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 (cho màu sắc thêm)

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

Vui lòng cho tôi biết cách tôi có thể cải thiện câu hỏi. Tôi là người mới và tôi không muốn làm tắc nghẽn Stackoverflow với những câu hỏi khó, nhưng đôi khi tôi không biết đủ để biết tại sao nó xấu. Tôi đã xây dựng một ứng dụng mẫu để triệt để nhất có thể về câu hỏi này ... mà đã kiên trì trong một tuần. – NothingToSeeHere

Trả lời

2

Bạn có thể thử thay thế:

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

Với collection_check_boxes:

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

Tôi không hoàn toàn chắc chắn điều này là chính xác nhưng nó phải là một bước đi đúng hướng. Cho tôi biết làm thế nào nó đi.

+0

Hmmm ... nó cung cấp cho tôi "phương thức không xác định' value_two 'cho # "... có thể điều này có nghĩa là bạn không thể gấp nhiều trường ẩn thành một checkbox_collection? Tôi đã thử chỉ sử dụng: value_one ... thậm chí bạn có thể đặt nhiều giá trị cột với một hộp kiểm không? – NothingToSeeHere

+0

Tôi không hoàn toàn chắc chắn tôi hiểu lý do tại sao để làm điều đó, nhưng tôi cập nhật nó vì vậy bạn nên ít nhất có được một hộp kiểm cho mỗi màu. :) Tôi xin lỗi nếu tôi dày đặc ở đây, nhưng không nên bạn có thể nhận được các giá trị màu sắc của mối quan hệ màu sắc một khi bạn đã thêm các id màu sắc cho đối tượng xe hơi? Một lần nữa, xin lỗi vì sự hiểu lầm của tôi. –

+0

... Tôi đang cố gắng làm điều gì đó hơi lạ ... Tôi muốn có 1 check_box cho mỗi lần lặp lại 'sample_color' và kiểm tra hộp đó tạo ra một bản ghi 'màu' MỚI với: id,: value_one (nhãn gì & sample_color.value_one nói) và: value_two (những gì sample_color.value_two nói). bảng màu không phải là một tham gia ... Tôi chỉ cần một cách để tạo color.value_one và color.value_two từ các mẫu tương ứng của sample_color.value một và sample_color.value_two. – NothingToSeeHere

Các vấn đề liên quan