2009-11-12 2 views
0

나는 다음과 같은 예를보기에서 활성 레코드 연결에 어떻게 액세스합니까?

class Person < ActiveRecord::Base 
    has_many :moods 
end 

class Mood <ActiveRecord::Base 
end 

같은 모델이있는 경우는 어떻게 새로운 사람을 입력 할 때 나를 분위기를 선택할 수 new.html.erb 변경합니까? MySQL에 외래 키를 수동으로 추가해야합니까?

답변

4

선택 메뉴가 필요하면 collection_select 헬퍼를 찾고 있습니다.

체크 아웃 Formtastic, 당신을위한 좋은 선택 메뉴를 생성 할 수 있습니다.

1

레일 마이그레이션은 외래 키를 자동으로 생성하지 않습니다. 다음과 유사한 명령으로 마이그레이션 중에 제약 조건을 추가해야합니다.

execute "alter table moods add constraint fk_moods_persons foreign key (person_id) references persons(id)" 

이 작업을 자동으로 수행하고 작업을 단순화하는 플러그인이 있습니다. 인기있는 것들 중 몇몇은 다음과 같습니다

  1. Foreigner
  2. 레드 힐에 레일 코어 [www.railslodge.com/plugins/389-redhill-on-rails-core]

그리고 대한은에 표시 views, collection_select 도우미를 사용할 수 있습니다.

habtm이 더 좋은 연관성이 있다고 생각합니다 (둘 이상의 사람이 같은 분위기를 가질 수있는 경우). 또는 has_many : through가 더 좋습니다.

1

당신이 준 몇 가지 세부 사항에서, 당신이 뭘하려고하는지 조금 추측 할 수 있습니다. 하지만 어쨌든 노력 할게요 : 당신은 사람이 한 번에 정확히 하나 분위기를 갖고 싶어하는 경우

, 나는 이런 식으로 모델링 것 :

class Person < ActiveRecord::Base 
    belongs_to :mood 
end 

class Mood < ActiveRecord::Base 
    has_many :people 
end 

마이그레이션을에 사람들이 테이블을 만들 수

def self.up 
    create_table :people do |t| 
    ... 
    t.references :mood 
    ... 
    end 
end 

을이 당신이 원하는 경우, flyfishr64가 지적한대로 collection_select 명령을 사용할 수 있습니다 : 데이터베이스는 다음 문이 외부 키를 만들 포함해야한다. 도움이

<% form_for @person do |f| %> 
... 
<%= f.collection_select :mood_id, Mood.all, :id, :mood_name, :include_blank => "--- Choose your mood ---" %> 
... 
<% end %> 

희망 : new.html.erb에서 form_for 태그 내부

당신은 다음처럼 작성할 수 있습니다!

그러나 실제로 사용자가 여러 기분을 동시에 갖고 싶으면이 작업은 좀 더 복잡 할 것이며 두 모델 모두에서 has_and_belongs_to_many association을 사용하는 것이 좋습니다.

이 경우 Railscast 에피소드 : HABTM 체크 박스를 보는 것이 좋습니다. (죄송합니다. 한 줄 이상 게시 할 수 없으므로 링크를 직접 찾아야합니다. railscast.com으로 이동하여 17 번째 에피소드를 찾으십시오.)

관련 문제