2012-04-13 3 views
2

Я пытаюсь создать настраиваемое действие для страницы обновления моего профиля. Это не может быть обычное действие # edit или users # update, потому что только Admins могут использовать эту страницу.Rails 3. Как создать пользовательское действие PUT?

Так это то, что я имею в routes.rb (сторона вопрос: как я могу сделать ссылку стать mydomain.com/users/update_profile вместо mydomain.com/update_profile

get 'update_profile/:id' => "users#update_profile", :as => 'update_profile' 

_form.html .erb

<%= form_for @user, :url => update_profile_path(@user) do |f| %> 
    <%= render :partial => "form", :locals => {:f => f} %> 
<% end %> 

users_controller.rb

def update_profile 
    @user = User.find(params[:id]) 
    respond_to do |format| 
    if @user.update_attributes(params[:user]) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
    else 
     format.html { render action: "edit" } 
    end 
    end 
end 

Когда я отправить форму, я получаю это: маршрутизации Ошибка Нет маршрута матчей [PUT] «/ update_profile/1»

Я понимаю ошибку, потому что в соответствии с выходом rake routes действие update_profile является GET.

Поэтому мне нужно изменить его на PUT, но я не знаю, как это сделать. Как настроить настраиваемое действие PUT в routes.rb?

+0

Не так ли просто, как изменить 'get 'update_profile /: id'' на' put' update_profile /: id''? –

ответ

4

Вы должны добавить его в качестве члена вашей users ресурса

resources :users do 
    member do 
    put :update_profile 
    end 
end 

Таким образом, он будет по-прежнему быть частью вашего ресурса пользователей и маршрут будет автоматически сгенерирован и быть доступным в вашей форме через что-то вроде update_profile_user_path(@user)

+0

Я получаю эту ошибку 'Не удалось найти пользователя без ID' с этим URL' http: // localhost: 3000/users/1/update_profile'. Я также попробовал 'put 'update_profile /: id'', и он говорит мне, что мне не хватает действия. – leonel

+0

Удивительный, спасибо! : D – leonel

Смежные вопросы