javascript - 在 .js.erb 文件中的 Ajax 调用中创建 RoR 链接

标签 javascript jquery ruby-on-rails ruby ajax

我有以下 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。我不想只显示每个与会者的姓名,而是想使用他们的 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 方法中“注入(inject)”json,因为助手 link_to 将在从服务器请求 JavaScript 之前执行。

您希望使用不显眼的 JavaScript (UJ)。这是通过在链接上添加 :remote => true 来完成的。执行此操作后,请求将转到链接中放入的服务器端方法 (attendees)。服务器端,您需要有一个 respond_to block :

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

就是这样。

关于javascript - 在 .js.erb 文件中的 Ajax 调用中创建 RoR 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36022562/

相关文章:

javascript - 使用命令的数组

javascript - 如何通过在 javascript 中单击按钮来重新加载网页,但在重新加载后调用函数

android - 触发 *select* jQuery 事件后在手机上隐藏键盘

ruby-on-rails - Rails 4 - 如何匹配命名空间中的路由

ruby-on-rails - 如何在 Rails 和 Postgresql 中查找带有多个标签的帖子

javascript - 如何使用 jQuery 'select' 标签和确定的选定选项进行选择?

javascript - 从 Swift 4 向 Node.js 发送发布请求

java - 如何在 HtmlUnit 中执行 JavaScript 而不运行页面脚本

jquery - 选项[selected=true] 不起作用

ruby-on-rails - Ruby on Rails : What are Erubis' disadvantages and why isn't it packaged with Rails by default? 如何设置?