[RUBY-ON-RAILS] 저장하지 않고 update_attributes 레일?
RUBY-ON-RAILS저장하지 않고 update_attributes 레일?
기록을 저장하지 않습니다 update_attributes에 대한 대안이 있습니까?
내가 뭔가를 같이 할 수 있도록 :
@car = Car.new(:make => 'GMC')
#other processing
@car.update_attributes(:model => 'Sierra', :year => "2012", :looks => "Super Sexy, wanna make love to it")
#other processing
@car.save
BTW, 난 내가 한 줄에 모두 업데이트 할 @ car.model = '시에라'할 수 있지만, 알고있다.
해결법
-
==============================
1.나는 당신을 위해 무엇을 찾고있는 것은 assign_attributes 믿습니다.
나는 당신을 위해 무엇을 찾고있는 것은 assign_attributes 믿습니다.
그것은 기본적으로 update_attributes와 동일합니다하지만 기록을 저장하지 않습니다 :
class User < ActiveRecord::Base attr_accessible :name attr_accessible :name, :is_admin, :as => :admin end user = User.new user.assign_attributes({ :name => 'Josh', :is_admin => true }) # Raises an ActiveModel::MassAssignmentSecurity::Error user.assign_attributes({ :name => 'Bob'}) user.name # => "Bob" user.is_admin? # => false user.new_record? # => true
-
==============================
2.당신은 assign_attributes 또는 속성을 사용할 수 = (그들은 같은 것)
당신은 assign_attributes 또는 속성을 사용할 수 = (그들은 같은 것)
(레일 6) 업데이트 방법 치트 시트 :
출처: https://github.com/rails/rails/blob/master/activerecord/lib/active_record/persistence.rb https://github.com/rails/rails/blob/master/activerecord/lib/active_record/attribute_assignment.rb
또 다른 치트 시트 : http://www.davidverhasselt.com/set-attributes-in-activerecord/#cheat-sheet
-
==============================
3.당신은 '속성'방법을 사용할 수 있습니다 :
당신은 '속성'방법을 사용할 수 있습니다 :
@car.attributes = {:model => 'Sierra', :years => '1990', :looks => 'Sexy'}
출처 : http://api.rubyonrails.org/classes/ActiveRecord/Base.html
속성 = (new_attributes, guard_protected_attributes = TRUE) 당신은 속성 이름을 (다시 열 이름과 일치하는) 일치하는 키 해시를 전달하여 한 번에 모든 속성을 설정할 수 있습니다.
guard_protected_attributes가 true (디폴트)의 경우, 민감한 속성은 attr_protected 매크로를 사용하여 대량 할당이 양식으로부터 보호 할 수 있습니다. 또는 당신은 대안으로 attr_accessible 매크로를 액세스 할 수있는 속성을 지정할 수 있습니다. 그런 다음에 포함되지 않은 모든 속성은 대량 할당으로 허용되지 않습니다.
class User < ActiveRecord::Base attr_protected :is_admin end user = User.new user.attributes = { :username => 'Phusion', :is_admin => true } user.username # => "Phusion" user.is_admin? # => false user.send(:attributes=, { :username => 'Phusion', :is_admin => true }, false) user.is_admin? # => true
-
==============================
4.사용 중 하나 assign_attributes 또는 속성 = 방법을 저장하지 않고 액티브 모델 값의 질량 지정하십시오. 이러한 방법은 레일 3 및 최신에서 사용할 수 있습니다. 그러나주의해야 할 약간의 차이 및 버전 관련 망 가지고있다.
사용 중 하나 assign_attributes 또는 속성 = 방법을 저장하지 않고 액티브 모델 값의 질량 지정하십시오. 이러한 방법은 레일 3 및 최신에서 사용할 수 있습니다. 그러나주의해야 할 약간의 차이 및 버전 관련 망 가지고있다.
두 가지 방법이 사용에 따라 :
@user.assign_attributes{ model: "Sierra", year: "2012", looks: "Sexy" } @user.attributes = { model: "Sierra", year: "2012", looks: "Sexy" }
어느 방법이 검증을 수행하거나 콜백을 실행하는 것에주의; 저장 호출 할 때 콜백 및 검증이 발생합니다.
레일 3. 속성에서 assign_attributes의 속성 = 약간 다릅니다은 = 전달 된 인수가 해시이며, 즉시 반환, 그렇지 않은 경우는 것을 확인합니다; assign_attributes는 그러한 해시 검사가 없습니다. = 속성에 대한 액티브 속성 할당 API 설명서를 참조하십시오.
다음 유효하지 않은 코드는 자동으로 단순히 속성을 설정하지 않고 반환하여 실패합니다 :
@user.attributes = [ { model: "Sierra" }, { year: "2012" }, { looks: "Sexy" } ]
할당이 이루어 것처럼 =이 자동으로 작동합니다 속성을 성공적으로 할 때 정말, 그들은하지 않았다.
assign_attributes의 시도는 바깥 쪽 배열의 해시 키를 캐릭터 라인 화 할 때 유효하지 않은 코드는 예외를 발생합니다 :
@user.assign_attributes([ { model: "Sierra" }, { year: "2012" }, { looks: "Sexy" } ])
assign_attributes 첫번째 인수 해시 아니라는 것을 나타내는 stringify_keys NoMethodError 대한 예외를 발생한다. 예외 자체는 실제 원인에 대해 매우 유익한 것이 아니라 예외가 발생한다는 사실은 매우 중요하다.
이러한 경우의 유일한 차이점은 질량 할당을 위해 사용 된 방법이다 : 속성 = 자동 성공하고 assign_attributes 오류가 발생했음을 알리기 위해 예외를 제기한다.
이러한 예는 인위적인 보일 수 그들은 정도이지만 최종 .MAP 여기서 상기 결과는 API에서 데이터를 변환하거나 단지 데이터 변환의 시리즈를 사용하여 해시 잊는 경우 오류 유형이 발생하기 쉬운 . 몇 가지 코드를 귀하의 속성 할당에서 제거 위의 50 개 라인과 3 개 기능을 유지, 당신은 실패에 대한 조리법을 가지고있다.
레일 3 교훈은 이것이다 : 항상 대신 속성 =의 assign_attributes를 사용합니다.
레일 4, 속성에서 = 단순히 assign_attributes에 대한 별칭입니다. = 속성에 대한 액티브 속성 할당 API 설명서를 참조하십시오.
레일 (4)에 어느 방법이 상호 교환 적으로 사용될 수있다. 오류 ArgumentError : 실패는 첫 번째 인수는 매우 도움이 예외가 발생합니다 같은 해시를 전달하는 속성을 할당 할 때, 당신은 인수로 해시를 통과해야합니다.
만약 당신이있는 거 사전 광고 게재, 당신은뿐만 아니라, 저장하기 전에 검증에 관심이있을 수 선방에 준비 할당합니다. 당신은 유효을 사용할 수 있습니까? 무효? 이 방법. 두 부울 값을 반환합니다. 유효한? 그렇지 않은 경우 저장되지 않은 모델은 모든 검증 또는 false를 통과하면 true를 반환합니다. 무효? 단순히 유효한의 역인가?
유효한? 이처럼 사용할 수 있습니다 :
@user.assign_attributes{ model: "Sierra", year: "2012", looks: "Sexy" }.valid?
이것은 당신에게 save ()를 호출하기에 앞서 어떤 검증 문제를 처리 할 수있는 능력을 제공 할 것입니다.
from https://stackoverflow.com/questions/6770350/rails-update-attributes-without-save by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 어떻게 독립적 인 로그 파일에 레일에 뭔가를 기록하려면? (0) | 2020.02.21 |
---|---|
[RUBY-ON-RAILS] 방법의 RoR에서 업적 시스템을 구현하는 (0) | 2020.02.21 |
[RUBY-ON-RAILS] 루트 디렉토리 경로를 레일? (0) | 2020.02.21 |
[RUBY-ON-RAILS] 어떻게 S3에 데이터를 저장하고 레일 API / 아이폰 OS 클라이언트와의 보안 방법으로 사용자 액세스를 허용하려면? (0) | 2020.02.21 |
[RUBY-ON-RAILS] 3.1 및 이미지 자산 레일 (0) | 2020.02.21 |