Rails 4 路由问题,或其他问题;我现在不确定

Rails 4 routing issue, or something else; I am not sure at this point

好的,这些仪表板页面最初是在我尝试在使用脚手架生成的主控制器中呈现它们时工作的。我选择尝试将它们拆分成自己的控制器。我正在从另一个应用程序复制大部分内容,但它是 rails 3,我正在使用 rails 4。此外,我只有一个模型 order.rb,用于生成图表的查询所在.

Routes.rb:

Rails.application.routes.draw do
  resources :orders do   
    collection do
      get :search, as: 'search'
    end
  end

  namespace :dashboards do
    get 'chart_needby_monthly'
    get 'chart_total_orders_by_qty'
    get 'chart_qty_monthly'
  end

  root 'orders#landing'
end

控制器:

class DashboardsController < ApplicationController

  def chart_needby_monthly
    logger.info 'I’m inside the controller function, the value of params is: #{params([:dyear])}'

    year = ((params[:dyear]).gsub(/\D/,'')

    logger.info 'After assignmnet,  dyear is: #{dyear}'

    @chart_data_one = Order.search_one(year)
  end

  def chart_total_orders_by_qty
    @chart_data_two = Order.search_two(year)
  end

  def chart_qty_monthly    
    @chart_data_three = Order.search_three(year)
  end

  private 
    def chart_needby_monthly_params
      params.require(:dyear)
    end
end

chart_needby_monthly.html.erb

<div align = "center">
  <h3>Please Choose the Year for the Dashboard</h3>
</div>
<div align = "center">
  <%= form_tag dashboards_chart_needby_monthly_path, method: :get do %>
   <%= text_field_tag :dyear, (params[:dyear] || Time.now.year.to_s), :class => "search-query span3", :placeholder => "Enter the Year", :autofocus => "autofocus", :datatoggle => "tooltip", :title => "Enter a Year" %>
  <% end %>
</div>
</div>
</br>
</br>
    <%= column_chart @chart_data_one, {library: {hAxis: {title: "Month"}, vAxis: {title: "Number of Orders"}, title: "Need By (Month/Year)"}} %>

因此,当我尝试导航到该页面时,我得到了 500 出错页面。

我知道这里缺少一些东西。

意图如下:

用户在页面顶部的 text_field 中输入年份并按下回车键,它会根据输入的年份重新呈现页面;它默认为第一次渲染时的当前年份,以便默认将某些内容传递给模型中的查询。

我在 3 个不同的页面上有 3 个不同的图表。

这是服务器日志中的输出:

[INFO] (null):0 (null)(): (null): 在 2015-05-18 10:06:06 -0700[=10.63.134.10 开始获取“/dashboards/chart_needby_monthly” =15=]

所以它正在尝试获取,但它似乎从未真正到达控制器。我已经尝试解决这个问题 4 天了,但我似乎无法弄清楚我做错了什么。

哦,这里是路由抽取:

                       Prefix Verb   URI        Pattern                                     Controller#Action
                       search_orders GET    /orders/search(.:format)                        orders#search
                              orders GET    /orders(.:format)                               orders#index
                                     POST   /orders(.:format)                               orders#create
                           new_order GET    /orders/new(.:format)                           orders#new
                          edit_order GET    /orders/:id/edit(.:format)                      orders#edit
                               order GET    /orders/:id(.:format)                           orders#show
                                     PATCH  /orders/:id(.:format)                           orders#update
                                     PUT    /orders/:id(.:format)                           orders#update
                                     DELETE /orders/:id(.:format)                           orders#destroy
     dashboards_chart_needby_monthly GET    /dashboards/chart_needby_monthly(.:format)      dashboards#chart_needby_monthly
dashboards_chart_total_orders_by_qty GET    /dashboards/chart_total_orders_by_qty(.:format) dashboards#chart_total_orders_by_qty
        dashboards_chart_qty_monthly GET    /dashboards/chart_qty_monthly(.:format)         dashboards#chart_qty_monthly
                                root GET    /                                               orders#landing

您应该尝试在开发环境中重现它,以便您可以看到堆栈跟踪,告诉您到底出了什么问题,而不仅仅是出现服务器错误。

在您的控制器操作中,您这样做:

year = ((params[:dyear]).gsub(/\D/,'')

但是有一个未闭合的括号,所以您很可能遇到语法错误。将其更改为此以希望修复它:

year = (params[:dyear]).gsub(/\D/, '')

或者更好的是,这个,因为你不需要那些初始括号:

year = params[:dyear].gsub(/\D/, '')

不过,您在其他控制器操作中又犯了一个错误。在 chart_total_orders_by_qtychart_qty_monthly 中,您指的是未定义的局部变量 year。最简单的修复方法是将其提取到自己的方法中:

class DashboardsController < ApplicationController

  def chart_needby_monthly
    @chart_data_one = Order.search_one(year)
  end

  def chart_total_orders_by_qty
    @chart_data_two = Order.search_two(year)
  end

  def chart_qty_monthly    
    @chart_data_three = Order.search_three(year)
  end

  private
  def year
    params[:dyear].gsub(/\D/, '')
  end
end