Rails 3, как добавить пользовательский метод в контроллер - PullRequest
3 голосов
/ 15 декабря 2010

Я использую http://guides.rubyonrails.org/getting_started.html в качестве примера, чтобы помочь мне создать свое собственное приложение.Я создаю модули блога и комментариев просто отлично.Когда я добавляю метод в комментарии или контроллеры блога, я не могу заставить действие link_to работать, вызывая новую функцию.Все указывает на проблему в routs.rb, но я попробовал весь новый синтаксис, который я видел, и ничего у меня не работает.

Я пытаюсь создать простой метод execute в контроллере для запуска сценария ruby ​​и сохранения вывода в базе данных.Все работает в соответствии с руководством, но когда я пытаюсь расширить контроллер комментариев с помощью пользовательской функции execute, я не могу заставить ее работать.

comments_controller.rb  #Same as destroy 
def execute
  @post = Post.find(params[:post_id])
  @comment = @post.comments.find(params[:id])
  @comment.destroy
  redirect_to post_path(@post)
 end

_comment.html.erb
<%= link_to 'Execute Comment', [comment.post, comment],
    :method => :execute %>

routes.rb
resources :posts do
  resources :comments do
    get :execute, :on => :member
  end
end

rake routes |grep execute
execute_post_comment GET    /posts/:post_id/comments/:id/execute(.:format) {:action=>"execute", :controller=>"comments"}

Error when I click Execute comment link:
No route matches "/posts/3/comments/6"

1 Ответ

5 голосов
/ 15 декабря 2010

запустите rake routes и посмотрите, есть ли какие-либо маршруты, указывающие на действие вашего контроллера. Если нет, вам нужно будет создать его либо как «действие участника», либо с помощью правила соответствия.

Если вы видите маршрут, вы можете назвать его, передав параметр: as => route_name в правило маршрутизации. Это включит помощников route_name_path () и route_name_url () для вашего link_to

RailsCasts имеет хорошее краткое изложение синтаксиса маршрутизации рельсов 3 здесь

EDIT:

на основе примеров кода, попробуйте это:

<%= link_to 'Execute Comment', execute_post_comment_path(comment.post, comment) %>

Согласно документации здесь опция :method может содержать только допустимые глаголы http (получить, положить, опубликовать, удалить). Помощник link_to не может понять, какое действие вы хотите выполнить с помощью пользовательского действия члена, поэтому вы должны использовать именованный маршрут, как указано выше.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...