2016-10-01 2 views
0

컬렉션의 주문을 나열하는 인덱스보기가 있습니다. 각 주문마다 상태가 있습니다. 색인 페이지 인 AJAX 스타일에서 주문 상태를 업데이트하고 싶습니다.레일 AJAX 선택시 업데이트

레코드를 업데이트하려고 할 때 ID가 NULL 인 이유를 모르십니까?

index.html.erb

<h1>Recent Orders</h1> 

<section class="order-results"> 
    <ol class="list-group"> 
    <%= render partial: 'pf_order', collection: @pf_orders %> 
    </ol> 
</section> 

_pf_orders.html.erb

<%= form_for(pf_order, url: update_receiver_status_path(pf_order)) do |f| %> 
    <%= f.select :receiver_status, options_for_select(receiver_statuses, f.object.receiver_status), {include_blank: true}, {class: 'form-control'} %> 
<% end %> 

pf_orders_controller.rb

def index 
    @pf_orders = PfOrder.all 
end 

def update_receiver_status 
    @status = PfOrder.find_by(id: params[:id]) 
    @status.update_attributes(pf_order_params) 
end 

pf_orders.coffee

jQuery ($) -> 
    $(document).ready -> 
    $("#pf_order_receiver_status").bind 'change', -> 
     $.ajax 
     type: 'PATCH' 
     url: 'pf_orders/update_receiver_status' 
     data: 'pf_order[receiver_status]=' + $('#pf_order_receiver_status').val() 
,

routes.rb

patch 'pf_orders/update_receiver_status', as: 'update_receiver_status' 

LOGS

Started PATCH "/pf_orders/update_receiver_status" for 127.0.0.1 at 2016-10-01 17:36:11 -0400 
Processing by PfOrdersController#update_receiver_status as */* 
    Parameters: {"pf_order"=>{"receiver_status"=>"Completed"}} 
    PfOrder Load (1.0ms) SELECT "pf_orders".* FROM "pf_orders" WHERE "pf_orders"."id" IS NULL LIMIT $1 [["LIMIT", 1]] 
Completed 500 Internal Server Error in 4ms (ActiveRecord: 1.0ms) 



NoMethodError (undefined method `update_attributes' for nil:NilClass): 

답변

1

내가이 제대로 작동있어 방법은 다음과 같습니다

pf_orders_controller.rb

def update_receiver_status 
    @pf_order = PfOrder.find(params[:id]) 
    if @pf_order.update_attributes(pf_order_params) 
    render json: @pf_order.as_json, status: :ok 
    else 
    render json: {pf_order: @pf_order.errors, status: :unprocessable_entity} 
    end 
end 

def pf_order_params 
    params.fetch(:pf_order, {}).permit(:sequence_number, :message_guid, :hl7_document, :download, :post_status_code, :patient_id, :receiver_status) 
end 

_pf_order.html.erb

form_for

<%= label :receiver_status, 'Status:' %> 
      <%= select_tag :receiver_status, 
         options_for_select(receiver_statuses, pf_order[:receiver_status]), 
         onchange: "$.post('#{update_receiver_status_pf_order_path(pf_order)}', 
         {'_method':'patch', 'pf_order[receiver_status]':this.value});", 
         class: 'form-control' %> 
제거 당함

내가 올바른 경로에 대한 알렉산드르 Angelim에 pf_orders.coffee

routes.rb에서

resources :pf_orders do 
    patch :update_receiver_status, on: :member 
end 

감사를 jQuery를 제거하고 올바른 방향으로 날을 가리키는.

+0

일하게되어 기쁩니다. –

1

당신은 어디에서나 주문의 ID를 제출 아닙니다. 로그에서 확인할 수 있습니다. Parameters: {"pf_order"=>{"receiver_status"=>"Completed"}}.

RESTful 경로를 고수하고 싶다면 (사용자가해야한다고 생각합니다) /pf_orders/:id/update_receiver_status으로 요청해야합니다.

당신은 당신의 경로를 변경할 수 있습니다

patch 'pf_orders/:id/update_receiver_status', as: 'update_receiver_status' 

또는 당신의 pf_orders 자원에 사용자 정의 경로를 추가 :

resources :pf_orders do 
    patch :update_receiver_status, on: :member 
end 

할 수있는 마지막 일은 당신의 자바 스크립트 순서의 ID를 검색 할 수 있습니다. 이미 양식의 액션 URL에 반영되므로 쉽게 검색 할 수 있습니다. 여기

jQuery ($) -> 
    $(document).ready -> 
    $("#pf_order_receiver_status").bind 'change', -> 
     $.ajax 
     type: 'PATCH' 
     url: $('#pf_order_receiver_status').closest('form').attr('action') 
     data: 'pf_order[receiver_status]=' + $('#pf_order_receiver_status').val() 
+0

변경 사항을했지만 지금은 받고 있어요 : ActionController :: RoutingError (없음 경로 일치 [PATCH] "/ pf_orders") : – bradbajuz

+0

시도'form_for (pf_order, URL : update_receiver_status_pf_order_path (pf_order를))' –

+0

은 URL을 업데이트 동일한 오류가 발생합니다. – bradbajuz