Пользовательские действия в рельсах 3 - PullRequest
8 голосов
/ 20 декабря 2010

Я пытаюсь создать простую ссылку, которая переключит мой атрибут «status» в моей модели с «pending» на «active».Например, когда я впервые создаю пользователя, я устанавливаю статус «в ожидании».Затем, когда я показываю список пользователей, я добавляю кнопку, которая должна изменить статус этого пользователя на «активный».Я попробовал это с помощью специального действия (это хороший подход?), Но у меня возникли проблемы с автоматически сгенерированным именованным маршрутом.

в моем пользовательском index.html.haml: button_to "Manually Activate", activate_user_path

в маршрутах.1011 *

это работает, когда я говорю / users / 1 / activ, так как статус будет обновляться.Однако страница / users не отображается и выдает ошибку:

ActionController::RoutingError in Users#index
No route matches {:action=>"activate", :controller=>"users"}

, т. Е. Возникла проблема с activ_user_path, который я указал в своем представлении.(Однако, если я использую другой путь в стиле named-routs, который я не определил в моем файле rout.rb, чтобы проверить его, я получу

NameError in Users#index
undefined local variable or method `blahblah_user_url' for #<#<Class:0x00000102bd5d50>:0x00000102bb9588>

, поэтому, похоже, он знает, что он находится в маршрутах.но что-то еще не так? Я действительно новичок в рельсах и буду признателен за помощь! Спасибо!

Ответы [ 2 ]

9 голосов
/ 20 декабря 2010

Ваша ссылка должна выглядеть так:

button_to "Manually Activate", activate_user_path(@user)

Вам необходимо добавить, какого пользователя вы хотите активировать.

6 голосов
/ 20 декабря 2010

Ряд проблем, я вижу. Во-первых, вы не должны обновлять базу данных с помощью запроса GET. Во-вторых, button_to предоставит вам встроенную форму, которая при нажатии будет отправлять POST в ваше приложение. В-третьих, при настройке маршрутов вам необходимо указать путь пользователя (вы уже проверили его, сформировав URL в браузере).

пробег * * 1003

rake routes

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

Я подозреваю, что вам нужно использовать

button_to "Manually Activate", activate_user_path(user)

(пользователь или @user или любой другой пользовательский объект). В вашем button_to позвоните и измените «get» на «post» в файле маршрутов.

resources :users do
  member do
    post :activate
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...