[Rails]ActiveRecord에서 데이터를 업데이트할 때 각 열이 업데이트되었는지 알고 싶습니다

5232 단어 RubyRails

개시하다


제목과 같다.
다음 응용 프로그램은 채팅방에서 '제목' 과 '방 설명' 과 '분류' 를 설정할 수 있다
제목이 바뀌었을 때만 채팅방에 알리고 싶어요.

변경 전의 매개 변수를 얻거나 변경 여부를 판정하는 방법이 있다면 기쁩니다.

이루어지다


액티브 레코드 씨는'주명 체인지드'인가 봐요.이런 보조 방법이 있다고 들었는데...
room_controller
  def update
    if @room.update(room_update_params)
      if @room.title_changed? # ココ。title_cahged?がtrueであれば自動メッセージを送るようにしたつもり。
        Message.create(room_id: @room.id, user_id: current_user.id, content: "*自動投稿* タイトルを「#{@room.title}」に編集しました")
      end
      redirect_to room_path(@room.id)
    else
      render :edit
    end
  end
이런 느낌으로 실시해 보았지만 실패했다.
봤어Giithub의 rails 뭔가 업데이트된 것 같아.


열 이름changed?ActiveRecord의 콜백을 사용하여 처리 구분 가능
콜백 요약
저장 전에
オブジェクト.will_save_change_to_カラム名
저장 이후의 상황
オブジェクト.saved_change_to_{カラム名}?
이렇게 바꿀 필요가 있을 것 같아요.

재실현


room_controller.rb
  def update
    if @room.update(room_update_params)
      if @room.title_updated?
        Message.create(room_id: @room.id, user_id: current_user.id, content: "*自動投稿* タイトルを「#{@room.title}」に編集しました")
      end
      redirect_to room_path(@room.id)
    else
      render :edit
    end
  end
컨트롤러로 "saved change to"또는 "will save change to"라고 부르면 좋지 않으니까
모델 측면에서'갱신 여부를 판단하는 실례 방법'을 만들었다.
room.rb
  def title_updated?
    if self.saved_change_to_title?
      return true
    else
      return false
    end
  end
이렇게 하면 제목을 편집할 때만 정보를 발표할 수 있다.

끝말


이번에 rails의 원본 코드를 처음 봤는데 다시 보면 수확이 있을 거예요.
나는 시간을 내서 다시 보고 싶다.
끝.

좋은 웹페이지 즐겨찾기