Ruby on rails 带有嵌套属性的Rails表单保存两次
将rails表单与嵌套表单集成在一起,一切正常,但问题是记录保存了多次 app/models/user.rbRuby 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
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