[RUBY-ON-RAILS] 같은 분야에 attr_accessor 및 attr_accessible 사용
RUBY-ON-RAILS같은 분야에 attr_accessor 및 attr_accessible 사용
무슨 일이 다음 코드를 사용하여 백그라운드에서 어떻게됩니까?
class User < ActiveRecord::Base
attr_accessor :name
attr_accessible :name
end
힌트 : 클래스를 인스턴스화 할 때,이 데이터베이스에 지속됩니까? 그 이유는 무엇?
해결법
-
==============================
1.attr_accessor 루비 코드 및 데이터베이스의 열이없는 경우에 사용되는,하지만 여전히 양식의 필드를 표시합니다. 필드 이름을 당신이 원하는 경우에 당신이, 당신의보기 또는 모델에서이 필드를 사용할 수 있지만, 대부분은보기에이 허용하는 유일한 방법은 attr_accessor하는 것입니다.
attr_accessor 루비 코드 및 데이터베이스의 열이없는 경우에 사용되는,하지만 여전히 양식의 필드를 표시합니다. 필드 이름을 당신이 원하는 경우에 당신이, 당신의보기 또는 모델에서이 필드를 사용할 수 있지만, 대부분은보기에이 허용하는 유일한 방법은 attr_accessor하는 것입니다.
앤디 위를 벗어났습니다로 attr_accessible, 당신은 당신이 대량 할당을 허용 할 모든 열을 나열 할 수 있습니다. 이것의 반대는 내가 누군가에게 대량 할당 허용되지 않게하려면이 필드를 의미 attr_protected된다. 더 많은 다음 가능성이 당신이 누구와 함께 돌아온다 싶지 않아 데이터베이스의 필드가 될 것입니다. 상태 필드 등처럼.
-
==============================
2.대부분의 경우,이 필드는 데이터베이스의 사용자 테이블에 열이있는 경우 attr_accessor를 사용할 필요가 없습니다. 액티브는 당신을 위해 그것을 알아낼 것입니다.
대부분의 경우,이 필드는 데이터베이스의 사용자 테이블에 열이있는 경우 attr_accessor를 사용할 필요가 없습니다. 액티브는 당신을 위해 그것을 알아낼 것입니다.
attr_accessible 단순히 필드는 허용 (update_attributes으로, 예) 질량 할당을 통해 할당된다. 이 보안을 위해 좋다. MassAssignmentSecurity의 API 문서에서 더 많은 정보를 제공합니다.
-
==============================
3.빠른 답변 주셔서 감사합니다 모두! 결합 답은 나에게 내가이 퍼즐을 이해하는 데 필요한 조각을했다, 나는 생각한다.
빠른 답변 주셔서 감사합니다 모두! 결합 답은 나에게 내가이 퍼즐을 이해하는 데 필요한 조각을했다, 나는 생각한다.
(관련 문제, 나는이 전무 "개체가 #inspect 지원하지 않습니다"와 같은 오류 및 "무기 호에 대한 정의되지 않은 메서드 '키'NilClass"많이 얻고 있었다. 나는 att_accessor 필드를 제거하여, 지금 그것을 해결하기 위해 관리 전부.)
특히이 경우 실험으로이 내가 발견 한 것입니다 :
사실, : 이름 필드는 데이터베이스에 지속되지 않습니다.
user = User.new(:name=>"somename")
단지 개체의 속성을 설정하지만, 지속하지 않음 : 데이터베이스에 이름 열을. 다음과 같은 출력을 보여줍니다 '콘솔 레일'을 :
> user => <User id: nil, created_at: nil, updated_at: nil> > user.save => true > user => <User id:1, created_at: 2011-01-19 12:37:21, updated_at: 2011-01-19 12:37:21>
나는이 attr_accessor에 의해 만들어진 세터 (데이터베이스 지속성을 담당) 액티브의 세터 * 우선합니다 * 때문입니다 가정합니다. 이와 같이, 비록 개체에서 이름 필드 : 당신은 여전히에서 값을 검색 할 수 있습니다 :
> user.name => "somename"
그래서, 결론에서, 나는 필드에 attr_accessor를 사용하는 것이 아니라 데이터베이스에 지속되고 그들로 이어질 수 있음을 배웠다. 내가 attr_accessible가 외부에서 액세스 할 수 있어야합니다 데이터베이스에 필드에 대해 설명 생각하면서,이 경우에 변화를하지 않는 것.
-
==============================
4.이 액티브을 상속하기 때문에 당신이이 방법 저장 (하지만이 인스턴스화 될 때) 호출 할 때, 그것은 지속됩니다.
이 액티브을 상속하기 때문에 당신이이 방법 저장 (하지만이 인스턴스화 될 때) 호출 할 때, 그것은 지속됩니다.
해당 모델에 대한 모든 속성이없는 경우에, 나는 액티브 단순히 데이터베이스에 새 행 저장 (즉 개체 만 지속 ID를해야합니다)합니다 가정합니다. 나중에 사용자 모델에 속성을 추가 할 수 있습니다, 그리고 지속 인스턴스가 여전히 검색 할 수 있어야 이것은, 의미가 있습니다.
from https://stackoverflow.com/questions/4700785/using-attr-accessor-and-attr-accessible-on-the-same-field by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 자식에 schema.rb을 관리 할 수있는 선호하는 방법은 무엇입니까? (0) | 2020.02.25 |
---|---|
[RUBY-ON-RAILS] 기능을 확장 엔진 레일 (0) | 2020.02.25 |
[RUBY-ON-RAILS] 번들 / 업데이트를 설치하십시오 libv8 (therubyracer) 설치 (기본 확장자) 실패 (0) | 2020.02.25 |
[RUBY-ON-RAILS] 어떻게 레일 3 컨트롤러에서보기 파일의 기본 경로를 변경하려면? (0) | 2020.02.25 |
[RUBY-ON-RAILS] 루비 1.9.2 및 레일 3 열 수 없습니다 레일 콘솔 (0) | 2020.02.25 |