小编典典

根据Rails 3中另一个collection_select的选定项目自动填充text_fields

ajax


大家好

我试图解决这个问题,但是我仍然做不到。

我有一个Rails
3应用程序,正在处理发票和付款。在付款表格中,我有一个collection_select,其中显示了所有发票编号(从postgres数据库中提取),而我要执行的操作是选择一个发票时,自动填充其他text_fields(提供者,地址等)而没有以相同的形式重新加载页面。

我知道我应该使用Ajax,js,jquery,但是我是这些语言的初学者,所以我不知道如何或从哪里开始

希望你能帮助我…谢谢


阅读 250

收藏
2020-07-26

共1个答案

小编典典

您要做的是将ajax调用路由到控制器,该控制器将使用包含信息的json进行响应。然后,您将使用jquery填充不同的字段。

在您的路线中:

get "invoice/:id/get_json", :controller=>"invoice", :action=>"get_json"

在您的invoice_controller中:

def get_json
  invoice = Invoice.find(params[:invoice_id])
  render :text => invoice.to_json
end

在您的帐单模型中(如果默认的to_json方法不足够):

def to_json
  json = "{"
  json += "id:'#{self.id}'"
  json += ",date_created:'#{self.date}'"
  ...      //add other data  you want to have here later
  json += "}"
end

在您的JavaScript文件中,

$("#invoice_selecter").change(function(){  //calls this function when the selected value changes
  $.get("/invoice/"+$(this).val()+"/get_json",function(data, status, xhr){  //does ajax call to the invoice route we set up above
    data = eval(data);  //turn the response text into a javascript object
    $("#field_1").val(data.date_created);  //sets the value of the fields to the data returned
    ...
  });
});

您可能会遇到一些问题,如果您不在google chrome上,我强烈建议下载并安装fire
bug。如果是,请确保使用的是开发工具。我相信您可以通过右键单击并单击检查元素来打开它们。通过这种方式,您应该能够监视ajax请求,它是否成功以及其他情况。

2020-07-26