2014-04-05 2 views
0

Я пытался создать форму обновления для зарегистрированных пользователей в моем applcationНет маршрута матчей [POST] "/ пользователи/редактировать"

Вид:

<h2><%= @title =%></h2> 

<% if @user.errors.any? %> 
<div id="error"> 
<h2><%= pluralize(@user.errors.count,"error") %> prohibited this user from registering</h2> 
<ul> 
<% @user.errors.full_messages.each do |msg| %> 
<li><%= msg%></li> 
<%end%> 
</ul> 
</div> 
<%end%> 

<%= form_for :user do |form| %> 

<div class="reg_form"> 
<label for="first_name">First Name: </label> 
<%= form.text_field :first_name %> 
</div> 
<div class="reg_form"> 
<label for = "last_name">Last Name: </label> 
<%= form.text_field :last_name %> 
</div> 
<div class="reg_form"> 
<%=form.submit "Update"%> 
</div> 
<%end%> 

Контроллер: users_controller.rb

def index 
    unless session[:user_id] 
     flash[:notice] = "Please Login first" 
     redirect_to :action => "new" 
    end 
    @title = "Profile" 
    @user=User.find(session[:user_id]) 
end 


def edit 
    @title="Profile Update" 
    @user = User.find(session[:user_id]) 
    if param_posted?(:user) 
     if @user.update_attributes(params[:user]) 
      flash[:notice] = "Update Successful" 
      redirect_to :controller => "user", :action => "profile" 
     end 
    end 
end 

Включено: «edit» => «users # edit» в routes.rb. Однако, я получаю ошибку 'Нет совпадения маршрутов [POST] "/ пользователи/редактировать"'

Любая помощь приветствуется. Спасибо.

+0

вместо этого <% = form_for: user do | form | %>, попробуйте заменить на <% = form_for @user do | form | %> – LHH

+0

@Lalitharyani Итак, никаких других изменений для контроллера? – Krishna

+0

нет необходимости определять маршруты для прямого редактирования в вашем файле маршрутов ... просто добавьте ресурсы: пользователи, и он будет создавать маршруты по умолчанию для вашего действия редактирования. – LHH

ответ

0

Маршрут RESTful edit должен использовать глагол GET. Метод vanilla resource#edit не изменяет базу данных, а просто заполняет форму, заполненную значениями выбранного ресурса. Отправка этой формы в resource#update (с использованием глагола PUT) выполняет работу по фактическому изменению базы данных.

Итак, ваш метод users#edit не делает то, что делает стандартное действие RESTful. Я бы предложил использовать стандартный способ, если у вас есть действительно веская причина, и вы тщательно документируете эту причину. Я согласен с тем, что тратить время на поиски направляющих маршрутизации и ванильного контроллера было бы полезно.

0

Для обработки формы вам необходим маршрут POST. Попробуйте resources :users в routes.rb и введите rake routes в командной строке, чтобы просмотреть все доступные маршруты.

Я рекомендую вам просмотреть Rails Guides и посмотреть на все методы, созданные с помощью scaffold, и как Rails обрабатывает маршрутизацию для разных вещей для каждого из методов.

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

  • Нет связанных вопросов^_^