Ruby on Rails - button_to използване на маршрути за извикване на функция от контролера

Здравейте, сега имам проблем с button_to

Искам да настроя бутон, който извиква метод в контролера, ето как настройвам бутона:

(това се намира в issues/_edit.html.erb)

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

и искам това да извика тази функция в issues_controller.rb

  def cancel_return
    @issue.cancel_return(params)
  end

Добавих го и в routes.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
issues#cancel_return валиден маршрут ли е? не съм виждал routes.rb на redmine, но направихте ли и новото действие там, освен да го добавите в контролера?   -  person roninblade    schedule 28.08.2013
comment
@roninblade всъщност всъщност не съм сигурен как да го поставя в routes.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} Шаблон за изобразяване в рамките на оформления/база Проблеми с изобразяването/показване Завършено за 408ms (Преглед: 65, DB: 316) | 200 Добре знаеш ли защо не се нарича? - person Niko Adrianus Yuwono; 28.08.2013
comment
@nayoso можеш ли да напишеш пътя, който си дал в routes.rb, да покажеш какво изскача с методите show и cancel_return. - person dirtydexter; 28.08.2013
comment
имах предвид направи rake paths и ми кажи какъв метод показва всяко действие, което знаеш като типове 'get/put/delete' - person dirtydexter; 28.08.2013
comment
нека да продължим тази дискусия в чата - person dirtydexter; 28.08.2013