복붙노트

[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. ==============================

    1.attr_accessor 루비 코드 및 데이터베이스의 열이없는 경우에 사용되는,하지만 여전히 양식의 필드를 표시합니다. 필드 이름을 당신이 원하는 경우에 당신이, 당신의보기 또는 모델에서이 필드를 사용할 수 있지만, 대부분은보기에이 허용하는 유일한 방법은 attr_accessor하는 것입니다.

    attr_accessor 루비 코드 및 데이터베이스의 열이없는 경우에 사용되는,하지만 여전히 양식의 필드를 표시합니다. 필드 이름을 당신이 원하는 경우에 당신이, 당신의보기 또는 모델에서이 필드를 사용할 수 있지만, 대부분은보기에이 허용하는 유일한 방법은 attr_accessor하는 것입니다.

    앤디 위를 벗어났습니다로 attr_accessible, 당신은 당신이 대량 할당을 허용 할 모든 열을 나열 할 수 있습니다. 이것의 반대는 내가 누군가에게 대량 할당 허용되지 않게하려면이 필드를 의미 attr_protected된다. 더 많은 다음 가능성이 당신이 누구와 함께 돌아온다 싶지 않아 데이터베이스의 필드가 될 것입니다. 상태 필드 등처럼.

  2. ==============================

    2.대부분의 경우,이 필드는 데이터베이스의 사용자 테이블에 열이있는 경우 attr_accessor를 사용할 필요가 없습니다. 액티브는 당신을 위해 그것을 알아낼 것입니다.

    대부분의 경우,이 필드는 데이터베이스의 사용자 테이블에 열이있는 경우 attr_accessor를 사용할 필요가 없습니다. 액티브는 당신을 위해 그것을 알아낼 것입니다.

    attr_accessible 단순히 필드는 허용 (update_attributes으로, 예) 질량 할당을 통해 할당된다. 이 보안을 위해 좋다. MassAssignmentSecurity의 API 문서에서 더 많은 정보를 제공합니다.

  3. ==============================

    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. ==============================

    4.이 액티브을 상속하기 때문에 당신이이 방법 저장 (하지만이 인스턴스화 될 때) 호출 할 때, 그것은 지속됩니다.

    이 액티브을 상속하기 때문에 당신이이 방법 저장 (하지만이 인스턴스화 될 때) 호출 할 때, 그것은 지속됩니다.

    해당 모델에 대한 모든 속성이없는 경우에, 나는 액티브 단순히 데이터베이스에 새 행 저장 (즉 개체 만 지속 ID를해야합니다)합니다 가정합니다. 나중에 사용자 모델에 속성을 추가 할 수 있습니다, 그리고 지속 인스턴스가 여전히 검색 할 수 있어야 이것은, 의미가 있습니다.

  5. from https://stackoverflow.com/questions/4700785/using-attr-accessor-and-attr-accessible-on-the-same-field by cc-by-sa and MIT license