2014-05-23 2 views
2

저는 Ruby on Rails에 익숙하며 외래 키 관계와 어려움을 겪고 있고 양식 상자를 풀고 있습니다. Jobtitle 테이블에 외래 키가있는 Person 테이블이 있습니다. Person은 jobtitle_id를 가지고 있고, Jobtitle은 MySQL에 pk id가 설정되어 있습니다. JobTitleRuby Newbie - 외래 키 및 양식의 드롭 다운

에서 사람 모델

class Person < ActiveRecord::Base 
    belongs_to :jobtitle, :foreign_key => "jobtitle_id", :class_name => "Jobtitle" 
    attr_accessible :id, :jobtitle 

class Jobtitle < ActiveRecord::Base 
    attr_accessible :id, :jobtitle 
    has_many :people 

에서 컨트롤러 : show.html에서

<%= f.collection_select(:jobtitle_id, @jobtitles, :id, :jobtitle) %> 

: 편집 양식에서

class PeopleController < ApplicationController 
    before_action :set_person, only: [:show, :edit, :update, :destroy] 
    before_filter :prepare_jobtitles 

    ... 
    private 
    def prepare_jobtitles 
     @jobtitles = Jobtitle.all 
    end 

은 드롭 다운이 주어진다. erb.

<p> 
    <strong>Jobtitle:</strong> 
    <%= select_tag 'jobtitle_id', options_for_select(Jobtitle.find_by_id(:jobtitle_id)) %> 

문제는 다음과 같습니다

(1) 편집 양식은 기본 테이블을 업데이트하지 않습니다. jobtitle_id를 다시 전달하지 않기 때문입니까? 또는 활성 레코드가 레코드를 갱신하려고 시도 할 때 외부 키 제한 조건이 실패합니다.

(2) 정말 텍스트 괜찮을 것처럼, 쇼 페이지에서 dropdown 상자를 원하지만, <%= @person.jobtitle %> 표시 # Jobtitle:0x4ea4dc0를 사용하지 않는

사람이 올바른 방향으로 날 지점 수 있을까요?

+0

후 귀하의'Jobtitle'와'Person' 모델 – Pavan

+0

망가 사용''의 attributes'이 잘못 <%= @person.jobtitle %>을주고있다 인스턴스 '를 사용합니다. 제목 또는 이름을 사용합니다. – Pavan

답변

2

문제는 당신이 Jobtitle's model instance로 치료 Jobtitle model.Rails의 속성으로 jobtitle을 부여했지만 아닌 attribute of Jobtitle .Try 대신 Jobtitle의 속성으로 title 또는 name을주고있다. 당신의 edit view에서

drop-down

<%= f.collection_select(:jobtitle_id, @jobtitles, :id, :title) %> 

같은 것 그리고 쇼보기에서, 당신은 단지

<%= @person.jobtitle.title %> 

personassociated jobtitle's title을 보여 줄 수 있습니다. 로 질환 치료`attribute` here.Rails로 jobtitle``Jobtitle 모델 :

현재 당신은

+0

그 점에 대해 감사드립니다. 이제 쇼보기가 올바르지 만 여전히 기본 테이블을 업데이트하지 않습니다. jobtitle_id 필드는 Person 테이블의 모든 항목에 대해 동일하게 유지됩니다. – thenapking

+0

@thenapking 편집보기에서 코드를 어떻게 지정 했습니까? – Pavan

+0

필자는 다음 줄을 문자 그대로 사용합니다 : <% = f.collection_select (: jobtitle_id, @jobtitles, : id, : name) %> – thenapking