2017-04-26 17 views
0

저는 아직 Ruby on Rails에 익숙하지 않고 한 지점에 머물러 있습니다.Ruby on Rails 업데이트 방법이 우연히 .. 왜 호출됩니까?

내 데이터베이스에는 교사 및 과정 모델이 포함되어 있습니다. 그것들은 has_and_belongs_to_many Association과 관련이 있습니다 (변경하지 않아야 함).

과정 상세보기 :

<p> Teacher: 
    <%= form_tag url_for(controller: 'courses', action: 'add_teacher') ,method: 'put' do%> 
    <%= select_tag :teacher, options_for_select(Teacher.all.collect {|t| [t._name, t.id]})%> 
    <%= hidden_field_tag(:course, value = @course.id) %> 
    <%= submit_tag 'hinzufügen' %> 
    <%end %> 
<% end %></p> 

Course_Controller : 내 코드의 부분이었다

def add_teacher 
    @course = Course.find(params[:course]) 
    @teacher = Teacher.find(params[:teacher]) unless params[:teacher].nil? 
    @course.teachers << @teacher 
    redirect_to action: 'show' 
end 


def update 
    redirect_to action: 'add_teacher', course: params[:course], teacher: params[:teacher] 
end 

. 나는 라우팅 문제 또는 다른 것이 있는지 정말로 모른다. 함수 add_teacher가 호출되기 전에 함수 업데이트가 호출되는 이유를 모르겠다. 처음에는 레일스가 기존 레코드를 변경하고 싶다는 사실을 알았 기 때문에 변경 (@ course.teachers < < @teacher)이 발생하면 "update"함수가 호출됩니다. 하지만 그는 먼저 update 함수를 호출하고 add_teacher로 리디렉션되는지 여부는 중요하지 않습니다. 어쨌든 함수를 호출합니다. 왜?

이제 올바른 함수를 사용하여 add_teacher로 리디렉션하는 update 함수를 사용하고 있습니다. "update"기능이 자동으로 호출되는 이유와 경로를 올바르게 설정하는 방법에 대한 답변이 더 좋을 수도 있습니다.

도움을 많이 주셔서 감사합니다. 나쁜 영어로 죄송합니다.

안녕

업데이트 : 나는 그가 어쨌든 리디렉션 확신했다,하지만 난 그것을 주석과 지금은 아무것도되지 좋아.

내 경로는 다음과 같습니다 :

get 'courses/add_teacher' 
get 'courses/update' 
resources :students, :forms, :votes, :courses, :years, :teachers 

과 더 많은이

+0

경로 모양은 – Iceman

+0

입니다. REST 모델을 준수하려면'resources : courses'와 그 안에'resources : teachers'가 있어야합니다. 그러면 교사와 코스를 연관시킬 수 있습니다. – tadman

+0

@tadman ok, 오히려이 기능을 다음과 같은 경로에 매핑해야합니다 :'post '/ : courses/: teachers''? 나는 라우팅에 익숙하다. ^^ – homior

답변

0

등으로부터 당신의 경로를 변경해보십시오 ...

get 'courses/add_teacher' 
get 'courses/update' 
resources :students, :forms, :votes, :courses, :years, :teachers 

에 ...

put 'courses/:id/add_teacher' 
resources :students, :forms, :votes, :courses, :years, :teachers 

너는 usin g GET : 페이지 또는 양식을 표시하는 데 사용됩니다. 양식에서 사용중인 PUT 작업은 개체를 업데이트하는 데 사용되는 작업입니다. 당신의 (a PUT 조치 인)

resources :courses 

를 호출 할 때

당신은 이미 정의되어 있기 때문에이 있었다 업데이트 경로가 필요하지 않습니다.

내 생각에 폼에서 PUT을 사용했기 때문에 레일스는 add_teacher 메서드를 우회하여 업데이트 될 코스의 첫 번째 PUT 작업을 수행했습니다.

경로에서 리소스를 중첩하는 방법에 대해 생각해보십시오. 나는 그것이 더 일하기 쉬울 것이라고 생각한다.

희망적으로 도움이됩니다. :) 당신은 더 많은 것을 여기에서 읽을 수있다. ..