Как вызвать пользовательский метод в контроллере Rails из View - PullRequest
3 голосов
/ 27 января 2012

Я успешно настроил сайт, который правильно использует основные функции CRUD.Однако, когда я пытаюсь добавить пользовательский метод в свой контроллер, я не могу подключить его к вызову link_to.Я получаю ошибку method not found.

Метод Controller выглядит следующим образом:

def complete
    return render :text => "Complete"
end

, и мой вызов в представлении выглядит следующим образом:

<%= link_to 'Complete', complete_list_task_path(@list,@task) %>

Этот же вызов работает для моего метода Edit, поэтому я не уверен, что делаю неправильно.Нужно ли делать что-то особенное, когда метод не является базовым вызовом CRUD?

Единственная релевантная часть моего файла маршрута выглядит следующим образом (List и Task являются вложенными ресурсами. List имеет много задач, и задача принадлежитк списку):

resources :lists do
    resources :tasks
end

Я также попытался добавить post "complete" => "lists/:id/tasks/:id#complete", :as => "complete" к моему маршруту, чтобы посмотреть, не поможет ли это неявно попытаться вызвать его, но я все еще получил «метод не найден».

Любая помощь в выяснении, как сделать этот звонок будет принята с благодарностью.Спасибо!

Ответы [ 2 ]

5 голосов
/ 27 января 2012

См. Добавление дополнительных действий RESTful в руководстве по маршрутизации Rails для деталей;Короче говоря, если вы хотите, чтобы маршрутизация распознавала что-либо, кроме стандартных методов, вам нужно добавить это.

4 голосов
/ 27 января 2012

Вам необходимо объявить метод в маршрутизаторе, «ресурсы» относятся к 7 грубым действиям (индексировать, создавать новые, создавать, редактировать, обновлять, удалять, показывать).

От макушки головыЯ думаю, вам нужно:

resources :lists do
  resources :tasks do
    member do
      post :complete
    end
  end
end

Вложенность делает меня менее уверенным, но это то, что вам нужно сделать в общем.

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