2012-04-26 1 views
4

내 형태 :formtastic 액션에 맞춤 함수를 할당하는 방법은 무엇입니까?

def save_and_new 
    print 'SAVE_AND_NEW' 
    @campaign = Campaign.find(params[:id]) 

    respond_to do |format| 
     if @campaign.update_attributes(params[:campaign]) 
     format.html { redirect_to new_campaign_path, notice: 'Campaign was successfully usaved.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @campaign.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Routes.rb :

resources :campaigns do 
    member do 
     post 'save_and_new' 
    end 
    end 

경로 함수에있어서

save_and_new_campaign POST /campaigns/:id/save_and_new(.:format) campaigns#save_and_new 

campaign_controller.rb에

<%= semantic_form_for(@campaign) do |f| %> 
... 
    <%= f.actions do %> 
    <%= f.action :submit, label: "Save"%> 
    <%= f.action :submit, label: "Save & New" %> 
    <%= f.action :cancel, label: "Cancel"%> 
    <% end %> 
<% end %> 

기능 과 내가 이해할 수없는 유일한 것은, 함수를 호출하기 위해 행동을 작성하는 것입니다.

답변

2

정확히 당신이 save_and_new 동작으로 무엇을 하려는지 확실하지 않지만, 왜 트리거하지 않는지 말할 수 있습니다. 기본적으로

, 당신은 semantic_form_for 새로운 레코드에 대한 create 행동과 기존 레코드에 대한 update 조치를 타격의 편안하고 규칙을 사용하려고 사용 formtastic로 만드는 형태. 첫 번째 제출 버튼 ('저장'이라고 표시)을 사용하여 create/update 개의 작업을 완료했지만 두 번째 "Save & New"버튼을 사용하여 다른 작업을 수행하려는 경우에는 params[:commit] 값을 확인해야합니다. 컨트롤러는 제출물 처리를 포크합니다. 아마도 일부 코드가 더 명확 할 것입니다. 난 당신이 save_and_new 조치를 달성하기 위해 노력하고, 그 가정에 의문을 제기하는 경로 아래로 당신을 설정할 수 있습니다 무엇에 명확하지 않다, 다시

def create 
    if params[:commit] == "Save" 
    # code for handling "Save" scenario 
    else 
    # code for handling "Save & New" scenario, perhaps even directly call: 
    save_and_new 
    end 
end 


def update 
    if params[:commit] == "Save" 
    # code for handling "Save" scenario 
    else 
    # code for handling "Save & New" scenario, perhaps even directly call: 
    save_and_new 
    end 
end 

:의 당신은 기존 레코드를 업데이트 제출하고 있습니다 가정 해 봅시다 더 좋은 디자인이지만 즉각적인 질문에 대답하십시오 : params[:commit]의 값을 create 또는 update으로 확인하면 올바른 방향으로 설정해야합니다.

+0

감사합니다, Cade, 꼭 맞게 작동합니다. 해결 됐어. –