Rails - 使用jquery从控制器获取页面视图

时间:2017-06-08 15:08:36

标签: jquery ruby-on-rails

我正在尝试使用select_tag查找客户ID,然后将其发送到控制器以呈现显示页面。

<%= select_tag( "cust_id", options_from_collection_for_select(@customers.by_last_name, :id, :last_name, (@customers_id.nil?) ? nil : @customers_id), {:class => 'custTag'}) %> 

jquery代码

$(document).ready
$(document).on('change', '.custTag', function(){

    var custId = $(this).val();
    alert (custId);
    $.get('/customers/custId');

});

我遇到两个问题:

  1. 当警报显示与记录关联的客户ID(custId)时,服务器正在响应消息 - ActiveRecord::RecordNotFound (Couldn't find Customer with 'id'=custId)
  2. 如果我将ID直接放在代码($.get('/customers/6559');)中,控制器会以Processing by CustomersController#show as '*/*'回复。
  3. 没有呈现任何内容 - 服务器确实收到输入的ID并且似乎正在处理请求,就像我直接在浏览器地址栏中输入了请求一样

    我提前为我的无知道歉 - 我对这个过程很新。

1 个答案:

答案 0 :(得分:0)

两个问题值得两个答案。

1)Rails路由具有URL参数,意思是/customers/:id其中:id是参数。您已经选择并且JQuery代码没问题,因为您已经确认了自己,但是您需要将custId添加到$.get中的字符串中以发送实际ID。

目前您的请求是/customers/custId,因此它正在尝试查找id = custId ...

$.get('/customers/' + custId);

2)需要处理AJAX否则没有任何反应。你的请求被发送,响应被发送回你的JS,然后什么都没有,因为没有定义。

你想要发生什么?您是否尝试过使用HTML而不是JS?

我说你想要的是将页面重新渲染为show,所以......

$.get('/customers/' + custId).done(function(data){
  $(document).html(data) // something like this to replace the content
})

这些事情的经验法则是,首先使用HTML!如果您认为合适,请使用AJAX。

祝你好运!