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_qty
和 chart_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
好的,这些仪表板页面最初是在我尝试在使用脚手架生成的主控制器中呈现它们时工作的。我选择尝试将它们拆分成自己的控制器。我正在从另一个应用程序复制大部分内容,但它是 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_qty
和 chart_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