将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
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 %>
但是它将保存记录两次。如何解决?
[创建新的User
时,只需将:badges
属性作为user_params
的一部分传递
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