【问题标题】:Add certain nested attributes on create在创建时添加某些嵌套属性
【发布时间】:2018-10-11 22:21:50
【问题描述】:

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

但是,我希望选择那些可供用户检查的属性(真/假)以包含在表单的创​​建中。下面的代码对我不起作用,不确定我缺少什么。

表格

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

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

控制器

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 非常感谢@pavan。但现在在我的日志中,我看到 Unpermitted parameter: :sale_checkbox sale_checkbox 在我的数据库中不存在,所以我的属性中没有它,但我虽然不需要只是传递一些参数。
    • @DollarChills 然后您可以通过在Staff 模型中包含attr_accessor :sale_checkbox 并将该属性列入staff_params 中的白名单来将其声明为虚拟属性
    • 谢谢@pavan。我已将所需的 attr_accessor 添加到我的模型和 staff_params (上面更新了代码)。日志现在确实可以识别这些字段,但如果为 false,嵌套表单仍会显示。
    • @DollarChills 如果为假,嵌套表单仍然显示是什么意思?
    • 对不起,我的意思是 if params[:staff][:summary_checkbox] == true 没有被识别。如果复选框值为 True 或 False,它不会创建嵌套表单的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多