[RUBY-ON-RAILS] 속성이 변경되었을 경우 3 확인 레일
RUBY-ON-RAILS속성이 변경되었을 경우 3 확인 레일
속성의 블록이 레일 3 년 갱신하기 전에 변경된 경우 필요는 확인합니다.
street1, street2, 도시, 주, 우편 번호
나는 같은 것을 사용할 수 있습니다 알고
if @user.street1 != params[:user][:street1]
then do something....
end
그러나 코드의 조각은 정말 긴 될 것입니다. 청소기의 방법이 있습니까?
해결법
-
==============================
1.(기본적으로 모든 모델에서 사용할 수) ActiveModel :: 더러운를 확인하십시오. 문서는 정말 좋은,하지만 당신과 같은 일을 할 수 있습니다 :
(기본적으로 모든 모델에서 사용할 수) ActiveModel :: 더러운를 확인하십시오. 문서는 정말 좋은,하지만 당신과 같은 일을 할 수 있습니다 :
@user.street1_changed? # => true/false
-
==============================
2.이것은 내가 여러 속성의 변화를 확인하는 문제를 해결하는 방법입니다.
이것은 내가 여러 속성의 변화를 확인하는 문제를 해결하는 방법입니다.
attrs = ["street1", "street2", "city", "state", "zipcode"] if (@user.changed & attrs).any? then do something.... end
변경된 방법은 개체에 대한 변경 속성의 배열을 반환합니다.
두 @는 user.changed 및 바인드합니다 내가 교차로를 얻을 수 있도록 배열 (워 및 다른 워 방법 참조)이다. 교차의 결과는 배열이다. 하나를 호출하여? 적어도 하나 개의 교차점이있는 경우 배열에, 나는 진정한 얻을.
도 매우 유용 상기 changed_attributes 방법은 원래의 값의 변화를 반환 (배열) 원래 새로운 값 속성의 속성 해시의 해시를 리턴한다.
당신은 버전이 이러한 방법을 지원하는 APIDock를 확인할 수 있습니다.
http://apidock.com/rails/ActiveModel/Dirty
-
==============================
3.에서 @ model.update_attributes는 () 변경 사항을 숨겨 때문에 ActiveModel :: 더러운 나를 위해 작동하지 않았다. 이 그래서 내가 컨트롤러의 업데이트 방법에 변화에게 그것을 감지하는 방법입니다 :
에서 @ model.update_attributes는 () 변경 사항을 숨겨 때문에 ActiveModel :: 더러운 나를 위해 작동하지 않았다. 이 그래서 내가 컨트롤러의 업데이트 방법에 변화에게 그것을 감지하는 방법입니다 :
def update @model = Model.find(params[:id]) detect_changes if @model.update_attributes(params[:model]) do_stuff if attr_changed? end end private def detect_changes @changed = [] @changed << :attr if @model.attr != params[:model][:attr] end def attr_changed? @changed.include :attr end
당신이 속성을 많이 감지하려는 경우가 지저분하지만를 얻을 수 변경합니다. 아마 컨트롤러하지만, MEH에서이 작업을 수행해서는 안된다.
-
==============================
4.레일 버전 5.1 콜백
레일 버전 5.1 콜백
레일 5.1, 루비의 이름으로 attribute_changed? 및 attribute_was 액티브 방법은 더 이상 사용되지 않습니다
사용 saved_change_to_attribute? 대신 attribute_changed?
@user.saved_change_to_street1? # => true/false
여기에 더 많은 예제
-
==============================
5.답변은 지식에 대한 더 나은하지만 아직보다도 우리뿐만 아니라 다른 접근 방식을 가지고, 개체 (@design)에 대해 변경 '종류'항목의 값하자
답변은 지식에 대한 더 나은하지만 아직보다도 우리뿐만 아니라 다른 접근 방식을 가지고, 개체 (@design)에 대해 변경 '종류'항목의 값하자
@design.changes.has_key?('catagory')
.CHANGES 각 열의 두 값 [OLD_VALUE, NEW_VALUE]와 같이 열 배열의 이름과 키와 해시 값을 반환한다. 예를 들어 상기 catagory위한 'ABC'를 'XYZ'@design의 변화로부터,
@design.changes # => {} @design.catagory = 'XYZ' @design.changes # => { 'catagory' => ['ABC', 'XYZ'] }
ROR에서 참조 변화에 대한
from https://stackoverflow.com/questions/5051135/rails-3-check-if-attribute-changed by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일에 루비에 여러 데이터베이스에 연결 (0) | 2020.02.18 |
---|---|
[RUBY-ON-RAILS] 왜 모든 레일 헬퍼 모두가, 모든 뷰에 사용할 수있는 시간인가? 이 해제하는 방법이 있나요? (0) | 2020.02.18 |
[RUBY-ON-RAILS] 어떻게 프로젝트에 레일 컨트롤러와 모델 이름을 바꾸려면 (0) | 2020.02.18 |
[RUBY-ON-RAILS] 루비의 액세스 방법을 인수하는 방법은 무엇입니까? (0) | 2020.02.17 |
[RUBY-ON-RAILS] 레일에 한 시간대에서 다른 시간대로 시간을 변환 (0) | 2020.02.17 |