2015-10-07 86 views
0

我有Ruby代碼調用一個方法接受一個候選人這樣一個空缺:jQuery的.replacewith Ruby代碼

<%= link_to "Accept", accept_candidate_path(vacancy_id: @vacancy.id, employee_id: e.id), method: :post, :remote => true, :id => "link_#{i}" %> 

該方法改變在數據庫中接受的狀態。

一旦被點擊,我希望替換與以下Ruby代碼:

<%= link_to "Cancel", back_to_pending_path(vacancy_id: @vacancy.id, employee_id: e.id), method: :post, :remote => true%> 

我也有一個的if/else,檢查候選人的狀態來顯示或者鏈接。但是,這只是通過刷新頁面觸發的,我只是希望它能夠接受它,在不完全刷新頁面的情況下更改按鈕。

目前我有這樣的:

$("[id^='link_']").click(function (event) { 
    $(this).replaceWith("Accepted") 
}); 

和它的作品只用純文本完全地很好,但我需要的文本是嵌入寶石。這可能嗎?

+1

這裏有很多選項。 1)顯示/隱藏這兩個鏈接,只需切換它們。即:表示接受;當點擊接受時,隱藏接受並顯示取消。 2)添加一個'accept.js.erb'文件並在這裏​​添加javascript。 「Unobtrusive javascript」 - http://edgeguides.rubyonrails.org/working_with_javascript_in_rails.html#server-side-concerns 3.通過AJAX在JavaScript文件中處理鏈接,並通過新鏈接返回一個部分(通過控制器)。 這將需要一些時間來輸入所有這些與例子,但我會如果你想。 –

+1

在元素上使用數據屬性並讀取該值 – charlietfl

+1

是的,我應該在我的列表中包含@charlietfl。爲了添加數據屬性,您甚至可以將控制器方法分組爲一個,並根據當前狀態接受/取消,因此您不必更改很多客戶端。 –

回答

1

它工作得很好,只是純文本,但我需要的文本是嵌入式的紅寶石。這可能嗎?

你必須創建.js文件,爲您的操作,您可以更改鏈接的HTML與路徑以及

如 創建accept_candidate.js.erb和添加的respond_to JS格式它會做的伎倆

# accept_candidate.js.erb 
$("[id^='link_']").html("<%= escape_javascript(render('cancel_link')) %>") 


# _cancel_link.html.erb 
<%= link_to "Cancel", back_to_pending_path(vacancy_id: @vacancy.id, employee_id: e.id), method: :post, :remote => true%> 
+0

謝謝你的回答,那裏有一個小問題,我在我的視圖中獲得了一個循環中的employee_id,因此我得到錯誤未定義的局部變量或方法'e'爲#<#:0x007fdd83ca80b0>參數employer_id和vacancy_id,我需要employee_id以及正確的行的目標更改。 –

+2

您需要從接受/候選人動作中設置'@ employee'對象,以便它在您的視圖中可用,然後將'e.id'更改爲'@ employee.id' –

+0

像魅力一樣工作!謝謝! –