Рельсы для начинающих здесь!
Я создал форму для редактирования информации о пользователе, и я пытаюсь отредактировать полное имя пользователя, которое изначально пусто. Однако, когда я нажимаю «отправить», поле полного имени становится пустым, и форма сообщает мне, что мои изменения не могут быть сохранены, потому что полное имя не может быть пустым. Я видел людей с такой же проблемой, но у них была эта проблема, потому что у них был драгоценный камень «protected_attributes».
Это вывод моего сервера:
Started PATCH "/users/9b62e326-ca9f-47b9-9e91-256e42ca52fc"
for 127.0.0.1 at 2019-05-26 21:30:22 -0400
Processing by UsersController#update as HTML
Parameters: {"utf8"=>"✓","authenticity_token"=>"G8zS2fWVdOBAc==", "user"=>{"full_name"=>"",
"email"=>"email@gmail.com"}, "commit"=>"Update User",
"id"=>"9b62e326-ca9f-47b9-9e91-256e42ca52fc"}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE
"users"."slug" = ? LIMIT ? [["slug", "9b62e326-ca9f-47b9-
9e91-256e42ca52fc"], ["LIMIT", 1]]
↳ app/controllers/users_controller.rb:57 (0.1ms) begin transaction
↳ app/controllers/users_controller.rb:37
(0.1ms) rollback transaction
↳ app/controllers/users_controller.rb:37
Rendering users/edit.html.erb within layouts/application
Rendered users/_form.html.erb (6.6ms)
Rendered users/edit.html.erb within layouts/application
(12.7ms)
Category Load (0.3ms) SELECT "categories".* FROM "categories"
↳ app/views/layouts/application.html.erb:31
User Load (0.4ms) SELECT "users".* FROM "users" WHERE
"users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 1],
["LIMIT", 1]]
↳ app/views/layouts/application.html.erb:38
Completed 200 OK in 137ms (Views: 126.5ms | ActiveRecord: 1.4ms)
Вот мой код формы:
<%= form_for @user, html: { multipart: true } do |f| %>
<% if @user.errors.any? %>
<h2><%= pluralize(@user.errors.count, "error")%> prevented
this post from saving:</h2>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
<%= f.label :full_name, "Full Name" %>
<%= f.text_field :full_name %>
<%= f.label "Upload profile picture" %><br><br />
<%= f.file_field :profile %><br/><br/>
<br>
<%= f.label "Email (Will not be published)" %><br>
<%= f.text_field :email %>
<% @full = @user.full_name %>
<%= f.hidden_field :full_name, :value => @full %>
Пользовательский контроллер:
class UsersController < ApplicationController
before_action :find_user, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, only: [:show]
def show
@user = User.find(params[:id])
@user_posts = @user.posts.all.order("created_at desc")
@posts = Post.all.order("created_at desc")
end
def index
@users = User.all.order("created_at desc")
end
def edit
end
def new
@user = User.new(:email => 'test@example.com', :password =>
'password', :password_confirmation => 'password', :full_name
=> 'Jane Doe')
@user.save
end
def create
@user = User.new(user_params)
@user.save
if @user.save
redirect_to @user, notice: "Your changes were successfully
saved!"
else
render 'new', notice: "Oh no! Your changes were not able
to be saved!"
end
end
def update
if @user.update_attributes(user_params)
redirect_to @user, notice: "Your changes were saved!"
else
render 'edit'
end
end
def destroy
@user.destroy
redirect_to users_path
end
private
def user_params
params.require(:user).permit(:email, :password,
:password_confirmation, :full_name, :slug)
end
def find_user
@user = User.friendly.find(params[:id])
end
end
User.rb
class User < ApplicationRecord
extend FriendlyId
friendly_id :full_name, use: :slugged
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :posts
validates :full_name, presence: true
validates :email, presence: true
def should_generate_new_friendly_id?
slug.blank? || full_name_changed?
end
end
Я также использовал тот же формат формы для моей почтовой модели, поэтому я не уверен, почему существует проблема.
Любая помощь приветствуется, спасибо!