2012-12-17 4 views
0

레일에서 데이터베이스 쿼리에 새 변수 (메서드)를 추가하려고합니다. 데이터베이스에 새로운 필드를 추가하고 싶지 않습니다. 기존의 컬럼을 가져 와서 새로운 메소드를 생성하고 싶습니다. 그러나 오류가 발생하지 않고 사용할 수 없습니다. 어떤 아이디어?레일 : 모델 (또는 컨트롤러) 인스턴스에 변수 추가

class Task < ActiveRecord::Base 

    attr_accessible :old_field, :new_field 

    def after_initialize 
    self.new_field = :old_field * 2 
    end 
end 

부분적으로,이 논리가 모델 또는 컨트롤러에 포함되는지 확실하지 않습니다.

+0

속성 (열)을 추가 하시겠습니까? –

+0

아니요, 새 항목이 아닙니다. 논리와 별도의 데이터베이스 열을 기반으로 만들고 싶은 새로운 방법입니다. – jake

+0

updated my answer –

답변

4
class Task < ActiveRecord::Base 

    attr_accessible :old_field 

    def new_field() 
    self.old_field * 2 
    end 
end 

또는 u는 그것을 추가해야이 방법을 수행 할 수 있습니다 Anatoliy와 같은 이전을 사용하여 데이터 테이블에 입력 한 필드는 다음과 같습니다.

class Task < ActiveRecord::Base 

    attr_accessible :old_field, :new_field 
    before_save :calc_new_field 

    private 
    def calc_new_field 
     self.new_field = self.old_old_field * 2 
    end 
end 
+0

나는 그것을 호출 할 수는 있지만 표시되지만 내 디버그 @tasks 또는 내 백본 .to_json에 표시되지 않습니다. 왜 그런가요? – jake

+0

나는 디버깅에 대해 잘 모르겠다. 나는 아직 비교적 루비에 대해 신선하다. 그리고 나는 back_bone.js를 한번도 사용하지 않았습니다. –

+0

기본적으로 전체 변수에 표시되지 않습니다. 단지 호출하면 표시됩니다. 전체 변수를 인수, 즉'tasks : # {raw @ tasks.to_json} '에 전달하면이 변수가 표시되기를 원합니다. 디버그 (내 순진한 마음에) 루비에 대한 PHP의'print_r'입니다. 이견있는 사람? – jake

0

새로운 속성을 추가 할 수는 attr_accesible

터미널이 시도하지 attr_accessor를 사용해야 가상 속성을 추가하려면 :

rails g migration AddNewFieldToTasks new_field:integer 
rails db:migrate 
+0

죄송합니다. 더 구체적이어야합니다 : 새 열을 추가하고 싶지 않고 논리에서 새 메서드를 추가하고 싶습니다. – jake

+0

내 대답은 –

+0

업데이트 됨 내 대답은 이해할 수 없다 =) –

관련 문제