需要帮助理解这段代码,据我所知,我知道“<<”附加到集合但在这里它正确保存记录,如果不调用.save方法怎么办?
#user.rb has_many :saved_properties,through: :property_saves,source: :property #users_controller.rb def update if @user.saved_properties << Property.find(params[:saved_property_id]) render plain: "Property saved" end
解决方法
也许查看源代码会对你有所帮助.这是我基于<<<<<<< activerecord中的方法:
def <<(*records) proxy_association.concat(records) && self end
rails/collection_proxy.rb at 5053d5251fb8c03e666f1f8b765464ec33e3066e · rails/rails · GitHub
def concat(*records) records = records.flatten if owner.new_record? load_target concat_records(records) else transaction { concat_records(records) } end end
rails/collection_association.rb at 5053d5251fb8c03e666f1f8b765464ec33e3066e · rails/rails · GitHub
def concat_records(records,should_raise = false) result = true records.each do |record| raise_on_type_mismatch!(record) add_to_target(record) do |rec| result &&= insert_record(rec,true,should_raise) unless owner.new_record? end end result && records end
rails/collection_association.rb at 5053d5251fb8c03e666f1f8b765464ec33e3066e · rails/rails · GitHub
def insert_record(record,validate = true,raise = false) set_owner_attributes(record) set_inverse_instance(record) if raise record.save!(validate: validate) else record.save(validate: validate) end end
def insert_record(record,raise = false) ensure_not_nested if record.new_record? || record.has_changes_to_save? if raise record.save!(validate: validate) else return unless record.save(validate: validate) end end save_through_record(record) record end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。