2011-03-22 6 views
0

업데이트에 대한 NoMethodError을주는 이유는 무엇입니까 :이와RSpec에 만약 User.field

User.stuff_to_extract = 'boo' 

C 레일에서 작업하지만 RSpec에에 실패 다음에

Failure/Error: @user1.stuff_to_extract = 'XXXXXX' 
NoMethodError: 
    undefined method `stuff_to_extract=' for #<User:0x105cd4e60> 



require 'factory_girl' 

Factory.define :user do |f| 
    f.sequence(:fname) { |n| "fname#{n}" } 
    f.sequence(:lname) { |n| "lname#{n}" } 
    f.sequence(:email) { |n| "email#{n}@google.com" } 
    f.password    "password" 
    f.password_confirmation { |u| u.password } 
    f.invitation_code  "xxxxxxx" 
    f.email_signature_to_extract  "" 
end 
+0

무엇이든'@ user1의 '에는 여러 가지 이유가있을 수있는 그러한 방법이 없습니다. 더 많은 컨텍스트가 필요합니다. –

+0

아, 쓰레기. 필드가 방금 추가 된 것처럼 DB를 다시 작성하려면 rake spec을 실행해야했습니다. – AnApprentice

답변

0

첫 번째 경우에는 User 클래스에서 메서드를 호출하고 있습니다. 두 번째에서는 User 인스턴스에서 호출합니다. 두 번째 예제 사용 해결하려면 :

User.stuff_to_extract = 'XXXXXX' 

또는 인스턴스에 사용할 수 있도록 함수를 다시 정의 :

class User 
    def stuff_to_extract= stuff 
    ... 
    end 
end 

대신 클래스에 사용할 수 있다는 :

class User 
    def self.stuff_to_extract= stuff 
    ... 
    end 
end 
+0

나는 혼란 스럽다. 사용자가 name, lastname, stuff_to_extract와 같은 여러 필드를 가지고있는 경우 그냥 할 수 없어 User.stuff_to_extract = xxx – AnApprentice

+0

ActiveRecord 객체에 stuff_to_extract라는 이름의 데이터베이스가있는 경우 user = User.new; user.stuff_to_extract = "xxx". 하지만 첫 번째 코드 예제 인 User.stuff_to_extract = 'xxx'가 작동하면 데이터베이스 필드를 제대로 정의하지 못했고 'stuff_to_extract ='라는 클래스 메서드를 정의한 것 같습니다. –

+0

P.S : stuff_to_extract = 메소드를 정의 할 필요가 없습니다. 사용자 테이블에 stuff_to_extract라는 속성/데이터베이스 열을 설정하고 ActiveRecord를 사용하고있는 경우. –