简体   繁体   English

控制器动作正在处理为html且未执行.js.erb文件

[英]controller action is processing as html and not executing .js.erb file

I am trying to add datepicker to my application to pass date values to my controller and get the filtered records based on date range...but I keep getting errors... 我正在尝试将datepicker添加到我的应用程序中以将日期值传递给我的控制器并根据日期范围获取过滤的记录...但是我一直收到错误信息...

Below is my expenses_controller action: 以下是我的expenses_controller操作:

def dateFilter 
   @expenses = current_user.expenses.where(:created_at =>   params[:start_date]..params[:end_date])

  respond_to do |format|
    format.html
    format.json { render json: @expenses }
    format.js
   end
end

My app/views/expenses/dateFilter.js.erb 我的应用程序/视图/费用/dateFilter.js.erb

$('.dateFilter').append('<%= escape_javascript(render(@expenses)) %>');

app/assets/javascripts/application.js app / assets / javascripts / application.js

//= require turbolinks
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .
//= require jquery.ui.all
//= require jquery.ui.datepicker

$(document).ready(function() {

  $('#date_form').submit(function (){  

    $.ajax({
      type: 'POST',
      url: "/expenses/dateFilter", 
      beforeSend: function (xhr) {xhr.setRequestHeader("Accept", "text/javascript");},
     data: { 'start_date' : $("input[name='expense[start_date]']").datepicker(),  'end_date' : $("input[name='expense[end_date]']").datepicker()}
     success: function(data) { <%= render "expenses/dateFilter" %>}
});

}); });

and my dateFilter.html.erb partial is as below 我的dateFilter.html.erb部分如下

<%= form_tag({:controller => 'expenses', :action => 'dateFilter'}, :class =>  'date_form', :remote => true) do %>
<%= datepicker_input "expense", :start_date, :class => 'dateFilter', :dateFormat => 'mm/dd/y' %>
<%= datepicker_input "expense", :end_date, :class => 'dateFilter', :dateFormat => 'mm/dd/y' %>
<%= submit_tag "Submit" %>
<% end %> 

my server logs are as below 我的服务器日志如下

Started GET "/expenses/dateFilter" for 127.0.0.1 at 2015-01-02 15:49:39 +0530
ActiveRecord::SchemaMigration Load (0.2ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by ExpensesController#dateFilter as HTML
User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Expense Load (0.4ms)  SELECT "expenses".* FROM "expenses" WHERE "expenses"."user_id" = ? AND ("expenses"."created_at" BETWEEN NULL AND NULL) ORDER BY created_at DESC  [["user_id", 1]]
Rendered expenses/dateFilter.html.erb within layouts/application (90.0ms)

Completed 500 Internal Server Error in 304ms 在304毫秒内完成500个内部服务器错误

ActionView::Template::Error (undefined method `datepicker_input' for #<#<Class:0x000000037b87e0>:0x00000003500570>):
1: <%= form_tag({:controller => 'expenses', :action => 'dateFilter'}, :remote => true) do %>
2:     <%= datepicker_input "expense", :start_date, :class => 'dateFilter', :dateFormat => 'mm/dd/y' %>
3:     <%= datepicker_input "expense", :end_date, :class => 'dateFilter', :dateFormat => 'mm/dd/y' %>
4:     <%= submit_tag "Submit" %>
5:     <% end %> 
app/views/expenses/dateFilter.html.erb:2:in `block in _app_views_expenses_date_ilter_html_erb__2248059185612722443_31189320'
app/views/expenses/dateFilter.html.erb:1:in `_app_views_expenses_date_ilter_html_erb__2248059185612722443_31189320'
app/controllers/expenses_controller.rb:42:in `dateFilter'

someone please help me slove my issues... 有人请帮助我解决我的问题...

The range queries work only on DateTime objects and you're passing Strings inside. 范围查询仅适用于DateTime对象,并且您正在内部传递字符串。 Try converting the params to datetime object and it should work 尝试将参数转换为datetime对象,它应该可以工作

@expenses = current_user.expenses.where(:created_at => (params[:start_date].to_datetime)..(params[:end_date].to_datetime)) @expenses = current_user.expenses.where(:created_at =>(params [:start_date] .to_datetime)..(params [:end_date] .to_datetime))

Your form_tag has a :class => 'date_form' and :remote => true and should get submitted correctly as a javascript request. 您的form_tag具有:class => 'date_form':remote => true并且应作为javascript请求正确提交。 BUT the code in application.js you have 但是您拥有的application.js的代码

$('#date_form').submit(

which means that date_form is not a class, but an id. 这意味着date_form不是类,而是ID。

Is there another form with with date_form as an id? 是否还有另一个以date_form作为ID的表单?

I would suggest putting console.log("is this even getting executed"); 我建议把console.log("is this even getting executed"); in your application.js right before 在您的application.js

$.ajax({
  type: 'POST',

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM