微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ruby on Rail 嵌套属性不保存到数据库

如何解决Ruby on Rail 嵌套属性不保存到数据库

我正在尝试创建一个表单来更新 2 个表 - Commission_type 和 Commission_tier。

我创建了模型、控制器和表单,但是当我提交时,我的 Commission_tier 表没有更新。只有我的 Commission_type 表更新。

有人可以看看我的代码并告诉我我做错了什么吗?我已经梳理了我的代码试图找到错误,但我找不到。

我的模型

class CommissionType < ApplicationRecord
  has_many :commission_tiers
  accepts_nested_attributes_for :commission_tiers
end
class CommissionTier < ApplicationRecord
  belongs_to :commission_types,optional: true
end

我的控制器

class Admin::CommissionTypesController < Admin::BaseController


  def index
    @commission_types = CommissionType.all
  end

  def new
    @commission_type = CommissionType.new
    @commission_type.commission_tiers.build
  end

def create
    @commission_type = CommissionType.new(commission_type_params)
    if @commission_type.save
      redirect_to admin_commission_types_index_path
    else
      render "new"
    end
  private

  def commission_type_params
    params.require(:commission_type).permit(:name,:active,:allow_mass_update,:plan,commission_tiers_attributes: [:id,:increment_value,:rate,:commission_type_id])
  end
end

我的表单

<%= simple_form_for @commission_type,url: admin_commission_types_index_path,wrapper: :bootstrap2,:html => { :class => 'form-horizontal' } do |f| %>
      <fieldset>
        <legend>Properties</legend>
        <%= f.input :name,label: 'Commission Name' %>

        <%= f.input :active,as: :boolean,label: 'Active?',label_html: { class: 'padding-top' } %>
        <%= f.input :allow_mass_update,label: 'Allow mass update?',label_html: { class: 'padding-top' } %>
        <%= f.input :plan,input_html: {id: 'dropdown'},label: 'Commission Type',collection: [ ['Select One..','select'],['Flat','flat'],['Flat +','flat_plus' ],['Promotional','promotional'],['Straight','straight'],['Waterfall','waterfall'],['Sliding Scale','sliding_scale'] ],selected: 'select'
                    %>
      </fieldset>
     
        
      <fieldset id="flat">
        <legend>Flat Commission</legend>
        <%= f.simple_fields_for :commission_tiers do |builder| %>
          <%= builder.input :rate %>
          <%= builder.input :increment_value %>
        <% end %>
      </fieldset>

我的表单正在显示和工作

html form

更新

一些额外的细节

CommissionType column values = [:name,:plan]

CommissionTier column values = [:id,:commission_type_id]

此外,当我提交表单时,以下是我的 params 的示例

<ActionController::Parameters {"name"=>"asdf","active"=>"1","allow_mass_update"=>"1","plan"=>"flat","commission_tiers_attributes"=><ActionController::Parameters {"0"=><ActionController::Parameters {"rate"=>"45"} permitted: true>} permitted: true>} permitted: true>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。