2013-05-06 3 views
0

일부 컨트롤러 코드를 변경하려고합니다. 그러나 나는 그것을 어디에 넣을 지 모른다. 레일 연관 - 컨트롤러 코드가 실행됩니까?

<%= f.association :location, :label_method => :name, :label => 'Location:' %> 

는 그 코드가 위치의 컨트롤러에 인덱스 코드를 실행하는 것입니다 가정 :

는 나는 새 연락처 양식에 다음 있습니다.

하지만 위치 색인에있는 코드를 모두 삭제했으며 위치에 대한 연결과 함께 연락처 양식에도 여전히 데이터가 있습니다.

나는 다음과 같은 코드가 연락 협회 STMT에서 실행하고자하는,하지만 난 그것을 넣어 어디 있는지 알고하지 않습니다

@locations = Location.ordered_by_ancestry_and(:name).map { |l| [" " * l.depth + l.name, l.id] } 

갱신 1

이것은 development.log 파일이

Processing by ContactsController#new as HTML 
Location Load (0.2ms) SELECT "locations".* FROM "locations" ORDER BY (case when locations.ancestry is null then 0 else 1 end), locations.ancestry, name 

UPDATE2

테스트 용으로 ContactsController # new를 변경했습니다.

# GET /contacts/new 
# GET /contacts/new.json 
def new 
    @locations = Location.first 

그리고 아직 선택 상자에 모든 위치가 있습니다.

+0

컨트롤러 코드가 해당 컨트롤러 액션이 트리거 될 때 실행 얻을 것이다, 그리고 링크가 다음에 또는 양식이 게시 될 때에만 발생합니다. "인덱스 코드 실행"이란 무엇입니까? 당신은'log/development.log'가 어떤 컨트롤러 메소드가 실행되고 있는지에 대해 말하고 있습니까? – tadman

답변

0

도우미 메서드는 해당 연결의 중첩 된 특성으로 작동하는 목록 (기본적으로 선택 목록이지만 라디오 또는 확인란 목록으로 수정할 수 있음)을 생성합니다. 제출되면이 필드는 상위 양식과 동일한 컨트롤러 조치 (이 경우 ContactsController#create 조치)로 전달됩니다.

지금까지 위치의 사용자 정의 목록, 당신은 association 방법에 collection 옵션으로이 통과 할 수있는 :

<%= f.association :location, :collection => @locations, :label_method => :name, :label => 'Location:' %> 

해야 할 수도 있습니다 조치에있을 것입니다이 @locations 목록을 작성하는 실제 장소를 여기에는 neweditcreateupdate이 포함됩니다 (오류로 인해 양식을 제출할 수없는 경우). before_filter을 사용하여 중복을 제거 할 수 있습니다.

코드는 같은 보일 수 있습니다 :

class ContactsController < ApplicationController 
    before_filter :load_locations, :only => [:new, :edit, :create, :update] 

    #... actions go here 

    private 
    def load_locations 
    @locations = Location.ordered_by_ancestry_and(:name).map do |l| 
     [" " * l.depth + l.name, l.id] 
    end 
    end 
end 
+0

도움을 주셔서 감사합니다! 나는 이것을 ContactsController # create'에 넣었고 여전히 위치 목록을 가지고 있습니다. '# POST/contacts # POST /contacts.json def create @contact = Contact.new (params [: contact]) @locations = nil' – Reddirt

+0

더 잘 설명하기 위해 업데이트되었습니다. – PinnyM

+0

도움을 주셔서 감사합니다! – Reddirt