2011-10-04 8 views
1

저는 Java 개발자입니다. 저는 지난 며칠 동안 Rails를 배웠습니다. 레일즈로 포팅을 시도하는 Java EE 애플리케이션 (ORM 용 Hibernate 사용)이 있습니다. 내 모델 중 몇 가지를 생성하기 위해 스캐 폴딩을 사용했습니다. 하지만 다른 모델에 대한 참조를 포함하는 다른 모델이 있습니다. 관계를 어떻게 정의합니까? 나는 그것을 비계 할 수 있습니까?Ruby에서 ActiveRecords의 객체에 대한 참조를 어떻게 만들 수 있습니까?

다음은 내가하려는 일의 예입니다.

public class Engine { 
    private int valves; 
    private int capacity; 
    private int rpm; 
} 

난 그냥 수행하여 루비의 엔진 클래스를 스캐 폴딩 할 수있는 사항은 다음과 같습니다 나는 자동차 클래스를 스캐 폴딩 어떻게

public class Car { 
    private Engine engine; 
} 

: 여기

rails generate scaffold Engine valves:integer capacity:integer rpm:integer 

나를 위해 까다로운 부분입니다 루비에?

답변

3

내가 올바르게 이해하면 연관성을 찾고 있습니다. 읽어야 할 great guide 입니다. 여기에서 이해해야 할 것은 모델에 정의 된 일련의 방법을 사용하여 모델이 서로 어떻게 관련되는지를 정의하는 것입니다.여기

내가 당신이 제안 것입니다 : 당신의 두 가지 모델에서

rails generate scaffold Car <db columns> 
rails generate model Engine valves:integer capacity:integer rpm:integer car_id:integer 

:

class Car < ActiveRecord::Base 
    has_one :engine 
end 

class Engine < ActiveRecord::Base 
    belongs_to :car 
end 

당신은 실제로 두 모델을위한 발판을 생성 할 수 있습니다 ... 컨트롤러와 뷰를 만들 것이다. 하지만이 경우 자동차 모델에

accepts_nested_attribues_for :engine 

을 대신 입력하는 것이 좋습니다. 이렇게하면 컨트롤러와 자동차 모델의 뷰에서 엔진 모델의 조작을 관리 할 수 ​​있습니다.

어쨌든, 이것이 당신이 필요한 것을 찾기 시작하는 데 도움이되기를 바랍니다.

1

references 활성 레코드 마이그레이션 도우미를 사용하여 수행 할 수 있습니다.

rails generate scaffold Car engine:references ...

가 추가됩니다

t.references :engine를 마이그레이션 파일에

엔진 모델 파일에

belongs_to :car 당신의 자동차 모델 파일에

has_many :engines

잊지 마세요 옵션에 대한 레일 api를 확인하는 (기본값, 관계 ca llbacks ...) (예 : http://railsapi.com/doc/rails-v3.0.8rc1/)

1

Ruby에 대해 자세히 알아야합니다. 루비는 정적 언어가 아니므로 모든 변수가 모든 종류의 객체를 가질 수 있음을 의미합니다.

rails generate 명령은 데이터베이스에이 정보가 필요하기 때문에 데이터베이스 용도로만 밸브 : 정수 등을 사용합니다.

당신의 관계 문제는 레일 (http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html 참조) has_many, bleongs_to 등에 대해 읽어야이

class Car 
    belongs_to :engine 
end 

class Engine 
    has_many :cars 
end 

처럼 관계를 정의 할을 또한 당신이 차에 외래 키 engine_id를 추가해야 관하여.

이 기능은 레일스에서 ​​여러 가지 규칙이 사용 되었기 때문에 효과가 있습니다.

기본 자습서가 없으면 멀리 가지 않습니다.

+0

이 대답에 대한 내 생각은 has_many가 올바른 방법이 아닐 수 있다는 것입니다. 나는 엔진의 인스턴스가 한 번에 한 대의 자동차에만있을 수 있다고 생각합니다. 모델 테이블 열에 메타 데이터가 보이지 않아 엔진의 유형처럼 보입니다. 다시 말하지만, 나는 [협회 가이드] (http://guides.rubyonrails.org/association_basics.html) – jaydel

+1

을 살펴 보는 것이 좋습니다. Engine 클래스에는 모든 유형 정보가 표시되어 있지 않으므로 Engine이 유형이라고 가정했습니다. – ayckoster

1

관계에 대한 비계가 없다면 "손으로"(너무 까다로운 것은 아닙니다) 어떻게해야하는지 배워야합니다. "Rails Guides" 및 여기 "Active Record Association"을보십시오.

: 당신이해야하는 추가 ID를 포함하도록 마이그레이션을 수정 rails g migration AddIds
  • :

    1. 데이터베이스를 마이그레이션 마이그레이션을 만들기 : 당신의 예에서

      , 당신은 다음 단계를 수행해야

      :
      ... 
      add_column :engines, :car_id, :integer 
      
    2. 하면 모델에 다음 코드를 추가합니다