저장하지 않고 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 = 'Sierra'
하지만 한 줄로 모두 업데이트하고 싶습니다.
당신이 찾고 있는 것은.
기본적으로 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
사용할 수 있습니다.assign_attributes
또는attributes=
(똑같습니다)
메서드 치트 시트 업데이트(레일 6용):
update
=assign_attributes
+save
attributes=
의 가명.assign_attributes
update_attributes
사용되지 않음, 별칭update
출처:
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/ #편집 시트
'속성' 방법을 사용할 수 있습니다.
@car.attributes = {:model => 'Sierra', :years => '1990', :looks => 'Sexy'}
출처: http://api.rubyonrails.org/classes/ActiveRecord/Base.html
attributes=(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
저장하지 않고 ActiveRecord 모델에 값을 대량 할당하려면 다음 중 하나를 사용합니다.assign_attributes
또는attributes=
방법들.이러한 방법은 레일 3 이상에서 사용할 수 있습니다.그러나 약간의 차이가 있으며 버전과 관련하여 주의해야 합니다.
두 가지 방법 모두 다음과 같은 사용법을 따릅니다.
@user.assign_attributes{ model: "Sierra", year: "2012", looks: "Sexy" }
@user.attributes = { model: "Sierra", year: "2012", looks: "Sexy" }
어느 방법도 유효성 검사를 수행하거나 콜백을 실행하지 않습니다. 콜백과 유효성 검사는 다음과 같은 경우에 발생합니다.save
이 호출됩니다.
레일 3
attributes=
와 약간 다릅니다.assign_attributes
3번 레일에서. attributes=
전달된 인수가 해시인지 확인하고 그렇지 않은 경우 즉시 반환합니다.assign_attributes
이러한 해시 검사가 없습니다.의 ActiveRecord 특성 할당 API 설명서를 참조하십시오.
다음과 같은 잘못된 코드는 속성을 설정하지 않고 단순히 반환하면 자동으로 실패합니다.
@user.attributes = [ { model: "Sierra" }, { year: "2012" }, { looks: "Sexy" } ]
attributes=
할당이 성공적으로 수행된 것처럼 조용히 행동합니다. 실제로는 그렇지 않습니다.
이 잘못된 코드는 다음과 같은 경우 예외를 발생시킵니다.assign_attributes
는) 의 해시 키를 문자열화하려고 .
@user.assign_attributes([ { model: "Sierra" }, { year: "2012" }, { looks: "Sexy" } ])
assign_attributes
a를 올릴 것입니다.NoMethodError
대 외 한 외 예 ▁for ▁exception에stringify_keys
첫 번째 인수가 해시가 아님을 나타냅니다.예외 자체는 실제 원인에 대해 그다지 유용하지 않지만 예외가 발생한다는 사실은 매우 중요합니다.
이러한 경우의 유일한 차이점은 대량 할당에 사용되는 방법입니다.attributes=
하고, 묵히성고하공묵,고,,assign_attributes
예외를 발생시켜 오류가 발생했음을 알립니다.
이러한 처럼 보일 의 데이터 하여 에예한조것으로 잊어버릴 때에도 이러한 할 수 .Hash[]
.map
위의 코드 50줄과 속성 할당에서 제거된 3개의 함수를 유지하면 실패할 수 있습니다.
레일 3의 교훈은 다음과 같습니다: 항상 사용assign_attributes
에 attributes=
.
레일 4
4, 레에 4서일에서,attributes=
에대별 뿐다입니일칭의 입니다.assign_attributes
의 ActiveRecord 특성 할당 API 설명서를 참조하십시오.
레일 4에서는 두 가지 방법 중 하나를 번갈아 사용할 수 있습니다.예외가 합니다.ArgumentError: When assigning attributes, you must pass a hash as an argument.
검증
만약 당신이 사전 비행 임무를 준비하고 있다면.save
저장하기 전에 확인할 수도 있습니다.당신은 할 수 .valid?
그리고.invalid?
이를 위한 방법.둘 다 부울 값을 반환합니다. valid?
저장되지 않은 모델이 모든 유효성 검사를 통과하면 true를 반환하고 그렇지 않으면 false를 반환합니다. invalid?
의역 됩니다의 입니다.valid?
valid?
다음과 같이 사용할 수 있습니다.
@user.assign_attributes{ model: "Sierra", year: "2012", looks: "Sexy" }.valid?
전화를 걸기 검사 할 수 .save
.
언급URL : https://stackoverflow.com/questions/6770350/rails-update-attributes-without-save
'it-source' 카테고리의 다른 글
"debug할 malloc_error_break의 중단점 설정" 방법 (0) | 2023.05.31 |
---|---|
Node.jsmongodb 드라이버 비동기/대기 쿼리 (0) | 2023.05.31 |
@수업 대.#수입의 (0) | 2023.05.31 |
MongoDB에서 localhost만 듣는 방법 (0) | 2023.05.31 |
Xcode 4에서 아이폰 앱 이름 변경 (0) | 2023.05.31 |