2014-01-22 3 views
0

그래서 여기 내 모델입니다 :has_one 및 belongs_to를 통해 _existing_ 개체를 사용자와 연결 하시겠습니까?

user.rb : has_one :interview_slot

interview_slot.rb : belongs_to :user

interview_slotstart_time, end_timeavailable 부울있다.

예를 들어 이미 20 interview_slot 인스턴스의 목록을 생성했으며 사용자가 드롭 다운 상자에서 그 중 하나를 선택하도록 허용한다고 가정 해 보겠습니다. , nil입니다

@interview_slot = find_interview_slot(@rushee) 

    def find_interview_slot(user) 
    return InterviewSlot.find_by(user_id: user.id) 
    rescue 
    nil 
    end 

@interview_slot 경우에, 나는 아직도 드롭 다운 상자에 available있는 인터뷰 슬롯의 모든 목록을 표시하려면 :

내가 먼저 사용자가 이미 인터뷰 슬롯이 있는지 확인 사용자가 인터뷰 슬롯 중 하나를 선택하고 제출을 클릭하고 지정된 InterviewSlot이 사용자와 연결되도록 할 수 있습니다. 내 질문은 어떻게 할 양식을 작성합니까? 저는 @user.interview_slots.build과 같은 것을 호출하고 form_for을 호출하는 것에 익숙합니다 : form_for(@interview_slot) do |f|,하지만 분명히 나는이 상황에서 새로운 interview_slot을 만들고 싶지 않습니다. 단지 기존의 interview_slot을 사용자와 연관시키고 싶습니다.

어떤 통찰력이라도 있습니까? 감사.

편집 : 또한 사용자와 아직 연결되지 않은 모든 InterviewSlots의 컬렉션 인 인스턴스 변수가 있습니다. @available_slots = InterviewSlot.where(user_id: nil); 사용자가이 컬렉션에서 단일 슬롯을 선택하고 슬롯을 사용자와 연관시킬 수있는 양식을 만드는 방법을 모르겠습니다.

편집 2 :

<%= form_for(@interview_slot) do |f| %> 

     <% slots_for_select = {} 
     @available_slots.each do |slot| 
      slots_for_select[slot.start_time.strftime("%a. %D | %l:%M %p")] = slot 
     end %> 

     <%= select_tag(:interview_slot, options_for_select(slots_for_select)) %> 

     <%= f.submit "Schedule Interview", class: "btn btn-sm" %> 

    <% end %> 

이 나에게 가능한 모든 인터뷰 슬롯의 드롭 다운 상자를 제공하지만, 문제가 @interview_slot가 동일하게 설정되어 있는지 다시 한 번입니다 :

지금은이 코드를 컨트롤러의 @user.interview_slots.build(interview_slot_params)에 - 어떻게 새로운 인터랙션 슬롯을 만드는 대신 @user의 ID로 선택된 interview_slot을 업데이트하도록 만드시겠습니까?

답변

0
# interview_slots_controller.rb 

def update 
    interview_slot = InterviewSlot.find(params[:interview_slot_id]) 
    interview_slot.user_id = your_current_user.id 
    interview_slot.save 
end 
관련 문제