[英]Creating RoR Links within Ajax call in .js.erb file
我有以下ajax調用,可在單擊按鈕時激活:
$.ajax({
url: button_action,
data: {},
type: "POST",
dataType: "json",
success: function( data ) {
var att = data.attendees
var attendee_list = "";
for (i = 0; i < data.attendees.length; i++) {
if ( i != att.length-1) {
attendee_list += att[i].first_name + " " + att[i].last_name + ", ";
} else {
attendee_list += att[i].first_name + " " + att[i].last_name
}
}
att_array.innerHTML = attendee_list;
}, . . .
});
現在,我們看到我從data.attendees
的服務器中獲取了事件參與者的列表。 我可以獲取每個與會者的名字和姓氏,並且可以輕松獲得id = att[i].id
的與會者id = att[i].id
。 我不僅要顯示每個與會者的姓名,還想使用其id
創建指向該與會者show
頁面的鏈接 。 理想情況下,我將創建一個變量full_name = att[i].first_name + " " att[i].last_name
,然后創建一個類似
<%#= link_to full_name, user_path(user.id) %>
我知道這涉及獲取json或javascript變量並在Ruby代碼中使用它們,然后輸出Ruby代碼。 這可能嗎?如果可以,我該怎么辦?
通過簡單的AJAX請求,您的操作方式是不可能的(通過設計)。 問題在於,Ruby代碼首先呈現(因為它是服務器端的),而JavaScript呈現之后的。 因此,您實際上無法在Ruby方法中“注入” json,因為幫助程序link_to
將在服務器甚至請求JavaScript之前執行。
您想要使用的是非侵入式JavaScript(UJ)。 通過在鏈接上放入:remote => true
可以完成此操作。 這樣做之后,請求將轉到鏈接( attendees
)中放置的服務器端方法。 服務器端,您需要有一個respond_to
塊:
def attendees
@attendees = Attendee.all #I'm making this up for the example
respond_to do |format|
format.js
end
end
然后,你需要一個.js.erb
動作后,即命名的文件attendees.js.erb
。 在服務器端執行時將調用它。 您將收到一系列物品。 您需要局部迭代它們。 這是您要執行的操作。 在attendees.js.erb
('.attendee-list-container').html("<%= j render(:partial => 'attendees_list', :locals => { :attendees => @attendees }) %>");
最后,您可以在_attendees_list.html.erb
中進行迭代並創建鏈接。
#in HAML:
-attendees.each do |attendee|
=link_to "#{attendee.first_name + ' ' + attendee_last_name}" , attendee
而已。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.