簡體   English   中英

在.js.erb文件的Ajax調用中創建RoR鏈接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM