gpt4 book ai didi

ruby-on-rails - 使用批量分配在 rails 4 中添加带有复选框的嵌套属性

转载 作者:行者123 更新时间:2023-12-03 23:58:09 25 4
gpt4 key购买 nike

错误:

param is missing or the value is empty: color

我正在制作一个表单,我可以在其中向父记​​录添加嵌套属性,并且我想通过复选框添加它们。我有父模型“Car”和子模型“Colors”……但我想从一些默认的“颜色”开始……所以我还有模型“Sample_Colors”,它根据“Car_Models”而变化。

我正在尝试使用复选框向关联的“汽车”添加多个“颜色”……我不希望与“样本颜色”和“颜色”建立 HABTM 关系,因为我需要“颜色”记录是可编辑的,而不仅仅是连接表。我已经使用 HABTM 完成了这项工作,所以我真的不明白为什么我不能以类似的方式创建非连接表记录。

我遇到麻烦的地方是批量分配......它要么抛出上面的错误,要么找不到colors_id......
澄清我正在尝试做的事情:
复选框需要
1.创建一个新的“颜色”记录(@color.new)与@car记录父相关联
2.将@color.new记录的“value_one”列设置为sample_color.value_one值
3.将@color.new记录的“value_two”列设置为sample_color.value_two的值

4.创建的复选框数量==迭代的@sample_colors。

汽车模型.rb
class CarModel
has_many :sample_colors, dependent: :destroy
has_many :cars, dependent: :destroy

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

样本颜色.rb
class SampleColor
belongs_to :car_model

颜色.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%>

汽车 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

最佳答案

您可以尝试更换:

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

我不完全确定这是正确的,但它应该是朝着正确方向迈出的一步。让我知道进展如何。 🍻

关于ruby-on-rails - 使用批量分配在 rails 4 中添加带有复选框的嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30918138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com