2015-09-10 39 views
0

我的應用程序中有兩個不同的頁面,它們調用AJAX請求來添加新的phone_number(key_contact)。這些是公司頁面(key_contact belongs_to company)和sales_opportunity頁面(,其中sales_opportunity has_many key_contacts通過sale_contacts)。這兩個頁面都有一個key_contacts的表格,我希望在添加phone_number後重新加載。我想使用create.js.erb文件僅重新加載應該在頁面上的表格(sales_opportunities上的表格與公司頁面上的表格不同)。因此,我需要測試發送AJAX請求的頁面的URL,然後相應地渲染一個部分。我已經嘗試了下面,但它不起作用。任何人都可以幫我解決原因嗎?如何測試哪個頁面在我的create.js.erb文件中發送了一個AJAX請求?

//update the key contact table with the new phone number, and close the modal 
$('#phone_number_modal').modal('hide') 
    .clear_previous_errors(); 
resetForm($('#new_phone_number')); 
$input = $('#phone_number_error'); 
$input.closest('.form-group').removeClass('has-error').find('.warning-block').html(''); 
//render the newly added key contact to the table if the AJAX call succeeded 

<% if (URI(request.referer).path == '/companies') %> 
$('#key-contacts-table-div').html("<%= escape_javascript(render :partial => 'shared/key_contacts_table')%>"); 
<% end %> 

<% if (URI(request.referer).path == '/sales_opportunities') %> 
$('#sale-contacts-table-div').html("<%= escape_javascript(render :partial => 'sale_contacts/table')%>"); 
<% end %> 
$('.alert').remove(); 
$('#key-contacts').DataTable({ 
    retrieve: true, 
}); 

回答

1

而不是使用referer的,你可以在你的網址添加額外params,讓我們說你怎麼稱呼它:action_type。然後在你的控制器,你可以這樣做:

class AAAController < ActionController::Base 
    def your_action 
    if params[:action_type] == "companies" 
     render "create_1" 
    elsif params[:action_type] == "sales_opportunities" 
     render "create_2" 
    end 
    end 
end 

然後你就可以把不同的邏輯create_1.js.erbcreate_2.js.erb分開。

+0

謝謝 - 但這個代碼屬於哪裏?它是否在Phone_Numbers控制器中? – Zoinks10

+0

感謝您 - 我沒有使用確切的答案,因爲我不太確定如何。相反,我將一個變量放在create controller動作中,以確定請求來自哪條路徑,然後測試該變量以確定我需要呈現哪些create.js.erb文件。完美的作品。 – Zoinks10

相關問題