在创建时添加某些嵌套属性

时间:2018-10-11 22:21:50

标签: ruby-on-rails ruby-on-rails-5

我有一个带有嵌套属性的表单。我的嵌套属性都可以正常工作。

但是,我想选择那些可供用户检查(真/假)以包括在表单创建中的属性。以下代码对我不起作用,不确定我所缺少的内容。

表格

<%= form_with(model: staff, local: true) do |f| %>    
  <%= f.collection_select :user_id, User.order('last_name'), :id, :full_name %>
  <%= f.collection_select :department_id, Department.all, :id, :name %>

  <%= f.check_box :sale_checkbox, {}, true, false %><%= f.label "Sales" %><br />
  <%= f.check_box :management_checkbox, {}, true, false %><%= f.label "Management" %><br />
  <%= f.check_box :summary_checkbox, {}, true, false %><%= f.label "Summary" %>
<% end %>

因此,使用上述代码,有时销售不适用,因此用户会取消选择它,因此它不会包含在表单创建中。

控制器

def create
 @staff = Staff.new(staff_params)
  if params[:staff][:sale_checkbox] == true
    @staff.sales.build
  end
  if params[:staff][:management_checkbox] == true
    @staff.managements.build
  end
  if params[:staff][:summary_checkbox] == true
    @staff.summaries.build
  end
end

def staff_params
  params.require(:staff).permit(:sale_checkbox, :management_checkbox, :summary_checkbox)
end

模型

class Staff < ApplicationRecord
 attr_accessor :sale_checkbox
 attr_accessor :management_checkbox
 attr_accessor :summary_checkbox
end

1 个答案:

答案 0 :(得分:1)

当您查看服务器日志时,您会看到params出现在staff散列下,因此您的代码不起作用。此外,您应该将true更改为"true",将build更改为create。下面的代码应该可以工作

def create
  @staff = Staff.new(staff_params)
  if params[:staff][:sale_checkbox] == "true"
    @staff.sales.create
  end
  if params[:staff][:management_checkbox] == "true"
    @staff.managements.create
  end
  if params[:staff][:summary_checkbox] == "true"
    @staff.summaries.create
  end
end