我希望这个问题相当简单,因为我对rails开发相对较新。 我试图从具有指定操作的控制器发出get请求并传递所需的参数。这是帮助程序类中的相关代码:
module ChartsHelper
def chart_tag (action, height, params = {})
params[:format] ||= :json
path = charts_path(action, params)
content_tag(:div, :'data-chart' => path, :style => "height: #{height}px;") do
image_tag('loading.gif', :size => '32x32', :class => 'spinner')
end
end
end
以及ChartsController中的相应操作:
class ChartsController < ApplicationController
def week_events_bar_chart
days = (params[:days] || 30).to_i
render :json => {
:type => 'AreaChart',
:cols => [['string', 'Date'], ['number', 'subscriptions']],
:rows => (1..days).to_a.inject([]) do |memo, i|
date = i.days.ago.to_date
t0, t1 = date.beginning_of_day, date.end_of_day
subscriptions = Kpsevent.all.count
memo << [date, subscriptions]
memo
end.reverse,
:options => {
:chartArea => { :width => '90%', :height => '75%' },
:hAxis => { :showTextEvery => 30 },
:legend => 'bottom',
}
}
end
end
路线文件包含以下内容:
resource :charts do
get 'week_events_bar_chart'
end
但是,在尝试执行此请求时,我得到以下输出:
Started GET "/charts.week_events_bar_chart?days=14" for 127.0.0.1 at Tue May 22 00:31:48 +1200 2012
Processing by ChartsController#index as
Parameters: {"days"=>"14"}
永远不会调用控制器操作。 有人能帮忙解决这个问题吗?
编辑:rake路线输出:
week_events_bar_chart_charts GET /charts/week_events_bar_chart(.:format) {:controller=>"charts", :action=>"week_events_bar_chart"}
POST /charts(.:format) {:controller=>"charts", :action=>"create"}
new_charts GET /charts/new(.:format) {:controller=>"charts", :action=>"new"}
edit_charts GET /charts/edit(.:format) {:controller=>"charts", :action=>"edit"}
GET /charts(.:format) {:controller=>"charts", :action=>"show"}
PUT /charts(.:format) {:controller=>"charts", :action=>"update"}
DELETE /charts(.:format) {:controller=>"charts", :action=>"destroy"}
答案 0 :(得分:1)
您对控制台的评论:
railschart_path(x,...)
中的将使用param id = x生成到ChartsController#show
的路由,默认情况下为GET /charts/x
。通过命名参数'action',你自欺欺人,'week_events_bar_chart'将只是restful路径中的id。
原始代码:
charts_path(x, params)
将使用格式x(ChartsController#index
)路由到GET /charts.week_events_bar_chart
,再次将其称为操作欺骗您。
您需要的是您的行动的指定路线助手week_events_bar_chart_charts_path
。
但是,由于您似乎希望您的帮助操作依赖,我建议您使用url_for。 http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-url_for
module ChartsHelper
def chart_tag(action, height, params = {})
params[:format] ||= :json
url = url_for({:action => action, :controller => 'charts'}.merge(params))
content_tag(:div, :'data-chart' => url, :style => "height: #{height}px;") do
image_tag('loading.gif', :size => '32x32', :class => 'spinner')
end
end
端
如果您真的想要完整路径,请将:only_path => false
传递给url_for。
答案 1 :(得分:0)
您是否尝试在charts
之后使用斜杠而不是句号来访问路线?
即
/charts/week_events_bar_chart?days=14
而不是
/charts.week_events_bar_chart?days=14