как обновить пользователя в ruby на рельсах - PullRequest
0 голосов
/ 18 июня 2020

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

Вот мой user.controller:

def update
    if !session[:id]
        redirect_to '/users'
    else
        @user = User.find(params[:id])
        @user.update(update_params)
        if @user.valid?
            @user.save
            redirect_to '/events'
        else
            flash[:errors] = @user.errors.full_messages
            redirect_to "/users/#{@user.id}/edit"
        end
    end 
end


def update_params
    params.require(:user).permit(:fname, :lname, :email, :city, :state)
end

редактировать обновление форма здесь моя edit.html.erb форма:

   <form action="/users/<%= @user.id %>/update" method="post">
        <input type="hidden" name="_method" value="patch">
        <%= hidden_field_tag :authenticity_token, form_authenticity_token %>
        <div class="form-group row">
            <label for="fname" class="col-sm-2 col-form-label">First Name</label>
            <div class="col-sm-10">
                <input type="text" name="user[fname]" class="form-control" placeholder="<%= @user.fname %>">

            </div>
        </div>
        <div class="form-group row">
            <label for="lname" class="col-sm-2 col-form-label">Last Name</label>
            <div class="col-sm-10">
                <input type="text" name="user[lname]" class="form-control" placeholder="<%= @user.lname %>">

            </div>
        </div>
        <div class="form-group row">
            <label for="email" class="col-sm-2 col-form-label">Email</label>
            <div class="col-sm-10">
                <input type="email" name="user[email]" class="form-control" placeholder="<%= @user.email %>">

            </div>
        </div>
        <div class="form-group row">
            <label for="location" class="col-sm-2 col-form-label">Location</label>
            <div class="col-sm-5">
                <input type="text" name="user[city]" class="form-control" placeholder="<%= @user.city %>">

            </div>
            <div class="col-sm-5">
                <select class="custom-select" name="user[state]">
                    <%= options_for_select(us_states)%>
                </select>
            </div>
        </div>
        <div class="form-group row clearfix">
            <div class="col-sm-10 offset-sm-2">
                <button type="submit" class="btn btn-primary float-right">Update</button>
            </div>
        </div>
    </form>

Только что обновила мою html форму

это ошибка в терминале, когда я нажимаю «Отправить» из своей формы:

(0,1 мс) начало транзакции Пользователь существует (1,7 мс) ВЫБРАТЬ 1 КАК один ИЗ «пользователей» ГДЕ («пользователи». «Email» = 'nhan13574@gmail.com' И «пользователи». «Id»! = 1) LIMIT 1 (0,1 мс) откат транзакции Перенаправлен на http://localhost: 4000 / users / 1 / edit

1 Ответ

0 голосов
/ 18 июня 2020

Можете ли вы поделиться формой? в основном проблема здесь.

Кроме того, @user.update на самом деле сохраняет данные в db, нет необходимости save после него .. вот отрефакторированная версия вашего фрагмента:

def update
  return redirect_to '/users' unless session[:id]

  @user = User.find(params[:id])
  if @user.update(update_params)
     redirect_to '/events'
  else
     flash[:errors] = @user.errors.full_messages
     redirect_to "/users/#{@user.id}/edit"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...