javascript - 使用ajax更新rails中的部分内容

标签 javascript jquery ruby-on-rails ajax html-select

我目前正在尝试创建一个简单的下拉列表,其中包含姓名和电话号码,然后当您单击所选选项时,它会使用您输入的所选选项的子对象更新页面上的另一个部分使用 Ajax。

即如果您选择User1 | 555-555-5555 从下拉菜单中,您应该在第二部分中获得 User1 的所有报告批准列表。

我知道这是一个简单的问题,但我不太确定如何编写 JavaScript 使其工作。

这是我的下拉列表部分代码:

下拉 View :

<select id="adminDropDown" onchange= "chooseManager();" class="form-control">
  <% if current_admin.manager_approvals.blank? %>
    <option>No Sub-Accounts added, Add one today!</option>
  <% elsif current_admin.manager_approvals.all? { |ma| ma.manager_approved == false }%>
    <option>No Sub-Accounts approved yet!</option>
  <% else %>
    <% current_admin.manager_approvals.where(manager_approved: true).each do |ma| %>
      <option value="<%= ma.id %>"><%= ma.manager_company %>&nbsp;|&nbsp;<%= number_to_phone(ma.manager_phone) %></option>
    <% end %>
  <% end %>
</select>

我的 Controller 看起来像这样...

class Admins::ReportapprovalsController < ApplicationController

  def index
    @reportapprovals = Reportapproval.all(table:params[:table], per_table: 4)
  end

  def show
    @reportapproval = Reportapproval.find(params[:id])
  end
end

第二个列表部分...

report_list.html.erb
 ....
      <tbody>
        <% if @selected_manager_approval.reportapprovals.blank? %>
         <tr>
          <td width="100%">No reports available</td>
         </tr>
        <% else %>
          <% @selected_manager_approval.reportapprovals.each do |ra| %>
              <% if ra.report.present? %>
                <tr>
                    <td width="25%"><%= ra.tenant_last_name.truncate(17) %></td>
                    <td width="25%"><%= number_to_phone(ra.tenant_phone) %></td>
                    <td width="25%"><%= ra.date_approved %></td>
                    <td width="25%"><%= link_to "View Report", {:controller => "admins/reports", :action => "show", :id => ra.report_id}, :method => :get, class: "btn-default btn-sm" %></td>
                </tr>
              <% end %>
            <% end %>
    <% end %>
  </tbody>

我的js文件...

$(chooseManager() {
  $('#adminDropDown')change(chooseManager() {
    value = $(this).val()
    $.post("admins/reportapprovals/manager_select", {manager_id: value}, chooseManager(data) );
  })
})

更新-这个js文件给了我这个错误

 SyntaxError: [stdin]:6:5: unexpected (

如何选择下拉菜单选项之一并刷新第二部分?现在,所选值应该将实例 ID 作为“@selected_manager_approval”传递给第二部分,然后仅自动刷新页面上的第二部分?我该怎么做?

最佳答案

在您的 Controller 中添加如下操作:

class Admins::ReportapprovalsController < ApplicationController

  def index
    @reportapprovals = Reportapproval.all(table:params[:table], per_table: 4)
  end

  def show
    @reportapproval = Reportapproval.find(params[:id])
  end

  def manager_select
    @selected_manager_approval = ManagerApproval.find(params[:manager_approval_id])       
  end
end

在 app/views/admins/report_approvals 中创建 manager_select.js.erb 并在该文件中添加以下代码。

// reportlist_wrapper_div_id is just an example you have to replace this with id of the div where you are rendering report_list partial.

$('#reportlist_wrapper_div_id').html('<%= escape_javascript render(:partial =>"report_list")%>');

像这样更改您的 selectManager 函数:

chooseManager = ->
  managerApprovalId = $(this).val()
  $.ajax
    type: 'POST'
    url: 'admins/reportapprovals/manager_select'
    data: manager_approval_id: managerApprovalId
  return

关于javascript - 使用ajax更新rails中的部分内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37424592/

相关文章:

javascript - Jquery动画进入页面

jquery - 在 jQuery 中使用 prependTo() 时出现问题

javascript - Bootstrap 导航栏不会与 Wordpress 切换

ruby-on-rails - 将 ActiveRecord 验证错误转换为 API 可使用错误

ruby-on-rails - 在 Rails 中实例化对象时如何初始化属性?

ruby-on-rails - time_ago_in_words => "in {{count}} days."吗?

javascript - 将异步方法之一重写为使用 Promise 的方法

Javascript 正则表达式 空格替换

javascript - 如何设计/构建大型模块化移动 Web 应用程序?

Javascript 图像 slider 将文本发送到屏幕外并调出页脚