Ruby on rails _是否已将_更改为_保存?是否不适用于接受\u嵌套的\u属性\u?

Ruby on rails _是否已将_更改为_保存?是否不适用于接受\u嵌套的\u属性\u?,ruby-on-rails,Ruby On Rails,是否将\u更改为\u保存?更改嵌套属性的值时返回false 是否更改为保存?不应用于接受的嵌套属性? 是否有另一种在保存前检查更改的解决方案 方法 def update_meeting @meeting.attributes = meeting_params redirect_to edit_meeting_path and return unless @meeting.has_changes_to_save? @meeting.save end 控制台

是否将\u更改为\u保存?
更改嵌套属性的值时返回false

是否更改为保存?
不应用于
接受
的嵌套属性? 是否有另一种在保存前检查更改的解决方案

方法

def update_meeting
  @meeting.attributes = meeting_params
          
  redirect_to edit_meeting_path and return unless @meeting.has_changes_to_save?

  @meeting.save

end
控制台

>> meeting_params
=> <ActionController::Parameters {"start_date"=>"2021/02/26", "start_time"=>"09:15", "end_time"=>"09:45", "kind"=>"web", "location"=>"xxx", "address"=>"", "phone_number"=>"xxx", "pin_code"=>"", "web_url"=>"https://www.google.com/", "web_meeting_id"=>"", "web_meeting_passcode"=>"", "ir_meeting_ir_speakers_attributes"=><ActionController::Parameters {"0"=><ActionController::Parameters {"ir_speaker_id"=>"222", "_destroy"=>"1"} permitted: true>, "1"=><ActionController::Parameters {"ir_speaker_id"=>"626", "_destroy"=>"0"} permitted: true>} permitted: true>} permitted: true>

>> @meeting
=> #<IrMeeting id: 111, user_id: 111, stock_id: 111, kind: "web", location: "xxx", address: "", speaker: "", start_at: "2021-02-26 00:15:00", end_at: "2021-02-26 00:45:00", remarks: nil, phone_number: "xxx", pin_code: "", web_url: "https://www.google.com/", web_meeting_id: "", web_meeting_passcode: "", required_document_count: nil, created_at: "2021-02-12 08:58:34", updated_at: "2021-02-12 10:34:20">
>会议参数
=>“2021/02/26”,“开始时间”=>“09:15”,“结束时间”=>“09:45”,“种类”=>“网络”,“位置”=>“xxx”,“地址”=>,“电话号码”=>“xxx”,“pin码”=>,“网络url”=>”https://www.google.com/“,”web会议id“=>”,”web会议密码“=>”,”ir会议发言人属性“=>”222“,”销毁“=>”1“}允许:true>,”1“=>”626“,”销毁“=>”0”}允许:真>}允许:真>}允许:真>
>>@会议
=> #

看起来ActiveRecord::Dirty(这就是您的
将\u更改为\u保存?
的来源)与嵌套属性不兼容。您可以保存会议,并验证在更新的时间戳没有更改

def update_meeting
  @meeting.attributes = meeting_params
  last_updated = [@meeting.updated_at, @meeting.nested_models.order('updated_at DESC').first].max

  @meeting.save
  if last_updated == [@meeting.updated_at, @meeting.nested_models.order('updated_at DESC').first].max
    # neither message or nested models were changed
    redirect_to edit_meeting_path(meeting)
  end
end

还可以验证关联。查找
:validate
部分。还可以查看相关的验证。和