2012-11-27 6 views
2

Acutally 나는 컴퓨터 과학 (하드, 내 생각에, 하하)의 일부 어려운 운동에 직면 해있다.Ruby on Rails Activemodel with Associations

Ruby on Rails에서 기본적인 레일을 사용하여 '사용자'모델에 대한 추가 정보를 얻으려면 CSV 파일을 열어야합니다.

그래서 지금 내 users_controller.rb 파일에서 csv 파일을 열고 올바른 행을 검색하여 인스턴스 변수에 추가하십시오.

하지만 ActiveRecord 모델처럼 작동하는 클래스를 작성할 수 있는지 궁금합니다. 그래서 ActiveModel을 사용하도록 코드를 변경합니다. 그러나 일부 Google 검색 결과에서 ActiveModel은 연관성과 같은 ActiveRecord를 사용할 수 없습니다. 그러나 그것들을 갖는 것이 좋을 것입니다.

도와 주시면 감사하겠습니다. 내 모델에 연관성과 같은 ActiveRecors를 제공하려면 어떻게해야합니까? 당신이 당신의 자신의 모델을 만들 때

인사말 멜라니

답변

0

때마다, 그것은 액티브의 상속이다

class Project < ActiveRecord::Base 
attr_accessible :content, :name, :user 
end 

이 그럼 당신은 많은을 가지고 모델을 말할 수있는 프로젝트의 작업 (의 말을하자) 이는 연관성을 만듭니다. 앱 로직에 대한 예를 제공해주세요. 여기

RailsCasts.com에서 인용 한 것입니다 : ".. 액티브 레코드의 비 데이터베이스 기능이 활성 모델에 밖으로 추출 3에서 레일이 당신이 완전히 tableless 모델 검증 및 기타 기능을 추가 할 수 있습니다"

모듈을 추가하여 모델에 기능을 추가하는 방법에 대한 설명도 있습니다.

1

CSV 파일은 데이터이므로 모델로 나타내야합니다.

그러나 액티브 모델을 사용하려는 경우 까다 롭고 많은 해킹 또는 원숭이 패치가 필요합니다.

당신이 정말로 다른 모델들에 대한 연관을 필요로하지 않는 한, 나는 모델 디렉토리에 독립 클래스 (즉 ActiveRecord::Base에서 상속되지 않음) 만들고, 거기에 CSV를 구문 분석 논리를 둘 것 :

class User 
    attr_accessor :name, :email, ... 

    def initialize(name,email,...) 
     # set data 
    end 

    def self.find(param_for_search) 
     # Parse CSV file, find line you want 
     # return a User instance 
     self.new(name, email) 
    end 
end 

I을 시스템의 작동 방식을 정확히 모르는 경우에도 Active Model과 비슷한 방식으로 작동 할 수 있습니다. 유사한 클래스 메소드를 추가 할 수 있으며 각 인스턴스 메소드는 CSV 파일 행을 나타냅니다.

0

는 나는 비 데이터베이스 소스가 어렵다 사용하는 액티브를 사용하는 것을 이해하지만, 나는 이런 식으로 뭔가 쓸 수 있다면 매력적인 vewy있을 거라고 생각 :

user.worktimes.first.value 

내보기와 같은 정보를 얻을 수 그것은 데이터베이스 테이블입니다. 나는 railscast.com을 방문한다. 나는이 이야기가 논의 된 에피소드를 발견했다. 그러나 나는 이것을 더 깊이 파고 드리고 싶습니다. 내가 읽을 수있는 더 이상의 자원이 있습니까?

제가 알고 있듯이 ActiveModel은 연결을 지원하지 않습니다? 왜 협회가 ActiveModel로 옮겨지지 않았는지 궁금합니다. 매우 유용하기 때문입니다.:) 그래서 여기

내 코드는 내가 작업 한 것을이다 :

사용자 모델 :

class User < ActiveRecord::Base 
    attr_accessible :department_id, :name 
    belongs_to :department 
end 

부 - 모델 : 여기

class Department < ActiveRecord::Base 
    attr_accessible :name 
    has_many :users 
end 

그리고 내 CSV 모델입니다 , 내가 만든 것 :

class Worktime 
    attr_accessor :user_id,:date,:value 

    def initialize(params) 
     dir = Rails.root.join('app', 'models', 'worktimes.csv').to_s 
     source = File.open(dir,'r') 
     while(line=source.gets) 
      data = line.split(';') 

      if data[0] = params[:user_id] && data[1] = params[:date] 
       @value = data[2]  
      end 
     end 
    end 
end 

처음으로 레일을 사용하면서 도움을 주신 것에 매우 감사드립니다.