Ruby on rails 带有嵌套属性的Rails表单保存两次

Ruby on rails 带有嵌套属性的Rails表单保存两次,ruby-on-rails,ruby,ruby-on-rails-3,has-many,Ruby On Rails,Ruby,Ruby On Rails 3,Has Many,将rails表单与嵌套表单集成在一起,一切正常,但问题是记录保存了多次 app/models/user.rb has_many :badges, :dependent => :destroy accepts_nested_attributes_for :badges, :allow_destroy => true, reject_if: proc { |attributes| attributes['badge_type'] == "0" } app/models/badge.r

将rails表单与嵌套表单集成在一起,一切正常,但问题是记录保存了多次

app/models/user.rb

has_many :badges, :dependent => :destroy
accepts_nested_attributes_for :badges, :allow_destroy => true, reject_if:  proc { |attributes| attributes['badge_type'] == "0" }
app/models/badge.rb

belongs_to :user_id
app/controllers/user_controller.rb

def new
    @user = User.new
    @user.badges.build
end

def create
   @user = User.new(user_params)
   @user.save!
end

private
def user_params
    params.require(:user).permit(:name,:email,badges_attributes: [:id, :badge_type,:_destroy])
end   
app/views/users/_form.html.erb

<%= f.fields_for :badges do |ff| %>
    <%= ff.check_box :badge_type %>
    <label>Admin</label>
<% end %>
但是它保存了两次记录。如何修复此问题?

创建新用户时,只需将:徽章属性作为用户参数的一部分传递即可

用户_controller.rb
我更新了我的问题并使用了permit参数,但它仍在创建重复的recordsTry调用User.newuser_参数,然后保存它。无需转到@user.badges.build。再次,删除@user.badges.build并仅使用我的代码。端点应该符合您的:new方法。我使用了:create,因为我在跟踪REST。对于您来说,代码应该在:new method中如果我们在新操作中删除@user.badges.build,那么它将如何在表单中显示..请编写您的新操作是否为用户和徽章保存重复记录?或者一个用户但有重复的徽章?对于徽章,您可以给出一个提交表单时发送的参数示例吗?
def create
  @user = User.new(user_params)
  @user.save
end

def user_params
  params.require(:user).permit(:name, :phone, :email, attributes_for_badges: %i[id badge_type _destroy])
end