2012-05-21 5 views
0

Я надеюсь, что эта проблема довольно проста, поскольку я относительно новичок в развитии рельсов. Я пытаюсь сделать запрос получения от контроллера с указанным действием и передать необходимые параметры. Это соответствующий код в классе хелперов:рельсы - как сделать запрос 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"} 

И действие контроллера никогда не вызывается. Может ли кто-нибудь помочь в решении этой проблемы?

EDIT: рейк маршруты выход:

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"} 

ответ

1

Чтобы ваш комментарий на консоли:

в рельсах chart_path(x,...) будет генерировать маршрут к ChartsController#show с парами ид = х, который по умолчанию GET /charts/x. Называя свой параметр «действие», вы обманываете себя, «week_events_bar_chart» будет просто идентификатором на спокойном маршруте.

К исходному коду: charts_path(x, params) маршрут к 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.

+0

Это сработало отлично - большое спасибо за код и подробное объяснение! – jmc

0

Вы пытались получить доступ к маршруту с косыми чертами, а не полной остановкой после charts?

т.е.

/charts/week_events_bar_chart?days=14 

вместо

/charts.week_events_bar_chart?days=14 
+0

изменения помощника путь к: 'путь = chart_path (действия, Params)' вызывает следующее сообщение об ошибке в консоли 'Started GET "/charts/week_events_bar_chart.json?days=14" для 127.0.0.1 в Вт Май 22 00:50:21 +1200 2012 AbstractController :: ActionNotFound (Не удалось найти действие 'show' для ChartsController): ' – jmc

+0

Можете ли вы показать результат выполнения маршрутов рейка в терминале? – Eifion

+0

Добавлена ​​соответствующая рубрика как править выше – jmc

Смежные вопросы