Ruby on Rails — button_to использует маршруты для вызова функции из контроллера

Привет, сейчас у меня проблема с button_to

Я хочу настроить кнопку, которая вызывает метод в контроллере, вот как я настраиваю кнопку:

(это находится в issue/_edit.html.erb)

<%= button_to "Cancel Return", :action => "cancel_return", :controller => "issues" %>

и я хочу, чтобы это вызывало эту функцию в issue_controller.rb

  def cancel_return
    @issue.cancel_return(params)
  end

Я также добавил его в route.rb

map.issue_cancel_return 'issues/cancel_return', :controller => 'issues',
                       :action => 'cancel_return'

но не получается, я уже пробовал объявить cancel_return как helper_method, но тоже не получилось. есть ли другое решение? или я неправильно делаю? Я использую версию ruby ​​1.9.3p125 и версию rails 2.3.15, я использовал старую версию, потому что пытался модифицировать redmine, буду признателен за любую помощь.

Спасибо


person Niko Adrianus Yuwono    schedule 28.08.2013    source источник
comment
Является ли issue#cancel_return допустимым маршрутом? я не видел route.rb redmine, но вы также добавили туда новое действие, помимо добавления его в контроллер?   -  person roninblade    schedule 28.08.2013
comment
@roninblade на самом деле я не совсем уверен, как поместить его в route.rb, я добавил его вот так map.issue_cancel_return 'issues/cancel_return', :controller =› 'issues', :action =› 'cancel_return', вы также можете увидеть это в отредактированном вопросе   -  person Niko Adrianus Yuwono    schedule 28.08.2013
comment
что происходит, когда вы вызываете действие прямо в браузере? т.е. 127.0.0.1:3000/issues/cancel_return/?plus_your_extra_params   -  person roninblade    schedule 28.08.2013
comment
Ошибка @roninblade 403 не авторизована, даже если я вхожу на сайт как администратор   -  person Niko Adrianus Yuwono    schedule 28.08.2013


Ответы (1)


вы должны поместить их в фигурные скобки, как это

<%= button_to "Cancel Return", { :controller => "issues", :action => "cancel_return"} %>

происходит то, что map не определяет метод для вызова, такого как GET/POST/DELETE, поэтому вы можете использовать это вместо строки map в вашем файле routes.rb

get "issues/cancel_return" => "issues#cancel_return"

это должно решить вашу проблему.

person dirtydexter    schedule 28.08.2013
comment
по-прежнему ничего не происходит :(, как я могу узнать, что функция вызывается рядом с изменением базы данных? есть ли какой-либо метод, например php print_r(TEXT);exit; в RoR?просто чтобы убедиться, что моя кнопка работает - person Niko Adrianus Yuwono; 28.08.2013
comment
посмотрите на свой журнал сервера, какой запрос происходит и что вызывается, а что нет. - person dirtydexter; 28.08.2013
comment
Я предполагаю, что это не вызвано последними 3 действиями, показанными в журнале после того, как я нажал кнопку Processing IssuesController#show (для 172.16.20.1 в 2013-08-28 11:42:16) [GET] Параметры: {controller=›issues , action=›show, id=›833} Шаблон рендеринга в макетах/базе Проблемы с рендерингом/show Завершено за 408 мс (Просмотр: 65, БД: 316) | 200 ОК, а ты знаешь, почему он не называется? - person Niko Adrianus Yuwono; 28.08.2013
comment
@nayoso, не могли бы вы написать путь, который вы указали в route.rb, показать, что получается с помощью методов show и cancel_return. - person dirtydexter; 28.08.2013
comment
я имел в виду сделать rake paths и сказать мне, какой метод показывает каждое действие, которое вы знаете, например, типы «получить/поместить/удалить» - person dirtydexter; 28.08.2013
comment
давайте продолжим это обсуждение в чате - person dirtydexter; 28.08.2013