2012-03-07 1 views
0

좋아요, 그래서 학생이 가능한 약속의 테이블에서 교수와 약속을 선택할 수있게하려고합니다. "선택"을 누르면 테이블에서 모든 약속 _id를 가져온 다음 선택한 약속이 표시된 테이블의 첫 번째 숫자를 넣습니다. 5 번 약속을 선택하는 대신 2, 4, 5, 6을 선택합니다. 그러면 선택한 약속 테이블에 2가 입력됩니다. 내가 원하는 것은 실제로 선택한 약속을 선택하는 것입니다. 여기 하나의 약속 대신 약속의 배열을 선택했습니다.

가 (난 단지 필요한 코드를 포함하고있어) 내 appointments_available이다 :

여기
<% @appointment.each do |appointment|%> 
<tr> 
    <td><%= appointment.professor_id %></td> 
    <td><%= appointment.student_id %></td> 
    <td><%= appointment.timeslot %></td> 
    <td><%= link_to 'Choose', :controller => "appointments", :action => "student_edit", :id => @appointment %></td> 
</tr> 
<% end %> 

는 약속 컨트롤러 (다시, 모든 코드가있다) :

def appointments_available 
    @appointment = Appointment.find_all_by_student_id("") 
end 

def student_edit 
    @appointment = Appointment.find_by_id(params[:id]) 
    @appointment.update_attribute(:student_id, session[:student].user_id) 
end 

어떤 도움을 주신다면

+1

'config/routes.rb'에 선언 된 적절한 resourceful 경로를 사용하고 REST-ful 명명 규칙을 사용하여 기본값을 준수하는 것이 일반적으로 훨씬 깔끔합니다.예를 들어, 이것은 레일 1 스타일 컨트롤러와 액션 선언 대신에'appointment_path (@appointment)'일 수 있습니다. 또한 GET 메서드를 사용하여 레코드를 업데이트하는 것은 아마도 매우 나쁜 생각입니다. 일부 브라우저는 그런 링크를 미리 가져오고 모든 것을 나쁘게 만듭니다. 가능한 한': method => : post'를 사용하십시오. – tadman

답변

0

실제 문제는 다음과 같습니다.

,210

가 있어야한다 :

<td><%= link_to 'Choose', :controller => "appointments", :action => "student_edit", :id => appointment.id %></td> 

가 가장 중요한 것은, 당신이 더 편안하고 되려고 노력하고 레일 컨트롤러의 표준 행동에 충실해야한다고, 당신의 senario 모범 사례를 따르지에 필요성을 나타내지 않습니다.

<% @appointments.each do |appointment|%> 
<tr> 
    <td><%= appointment.professor_id %></td> 
    <td><%= appointment.student_id %></td> 
    <td><%= appointment.timeslot %></td> 
    <td><%= link_to 'Choose', edit_appointment_path(appointment) %></td> 
</tr> 
<% end %> 

콜렉션을 나열 할 경우 인스턴스 변수의 이름을 여러 번 지정하십시오. find_all_by_을 사용하면 배열이 반환되며, 경우에 따라 Arel 컬렉션이 반환됩니다. 또한 이것이 귀하의 색인 작업 인 것으로 보이므로, 나는 그것을 사용하려고 노력할 것입니다.

def index 
    @appointments = Appointment.all 
end 

당신은 당신이 available의 범위가 경우 Appointment.available 부를 수있는 당신을 내가 모델로 그 이동 것, 메소드 이름 appointments_available을 사용했다.

수정 작업 중에는 _by_id 찾을 필요가 없습니다. 이미 찾을 수 있습니다.

@appointment = Appointment.find(params[:id]) 

하지만 당신은 단지 자원에 대한 생각을 할 때 내 변경 사항이 모든 정직에서, REST의 작동 방식을 이해하고, 어쩌면 일반 모델이 설치 될 방법을 볼 수있는 발판을 생성해야합니다 구현을 시작하기 전에 대부분의 시간 상황에서는 일반적인 RESTful 조치가 사용됩니다.

당신의 행동에 뭔가 다른 이름을 붙이는 것은 규칙에 어긋나지 만, Rails의 독창적 인 디자인으로 당신에게 부여 된 많은 관습을 잃어 버리게됩니다.

발판을 만든 다음 rake routes을 실행하여 경로를 들여다 보면 경로에 어떤 옵션이 있는지 알 수 있습니다. 예를 들어 컨트롤러에 edit 액션이있는 경우 edit_appointment 경로가 있으므로 편집하려는 약속을 edit_appointment_path(@appointment)에 전달하여 사용할 수 있습니다.

+0

IT 작업! 고맙습니다! – user1179269