gpt4 book ai didi

ruby-on-rails - 为什么当我尝试 user.save 时我的 Rails 回滚?

转载 作者:数据小太阳 更新时间:2023-10-29 06:21:10 26 4
gpt4 key购买 nike

我已经安装了 RailsTutorial 示例应用程序(类似 twitter 的应用程序),并且我试图了解为什么当我尝试更新用户数据库时,以下控制台代码没有更新数据库。我希望在使用 user.save 后更新用户信息。但是,这会回滚到未经编辑的数据。这是由于基于用户的限制吗?

用户 Controller :

class UsersController < ApplicationController

#before_filter :signed_in_user, only: [:index, :edit, :update, :destroy, :following, :followers]
# By default before filters apply to all actions
#before_filter :correct_user, only: [:edit, :update]
def edit
@user = User.find(params[:id])
end

def update

@user = User.find params[:id]

respond_to do |format|

if @user.update_attributes(params[:user])
flash[:notice] = "Profile updated"
format.html { redirect_to(@user, :notice => 'User was successfully updated.') }
format.json { respond_with_bip(@user) }
else

format.html { render :action => "edit" }
format.json { respond_with_bip(@user) }
end
end
end

private


def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user?(@user)
end

def admin_user
redirect_to(root_path) unless current_user.admin?
end


end

Rails 控制台:

1.9.3-p392 :001 > user = User.find(109)


User Load (8.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 109]]
=> #<User id: 109, name: "laurie", email: "auriepage@gmail.com", created_at: "2013-09-26 18:10:12", updated_at: "2013-09-26 18:10:12", password_digest: "$2a$10$aXEtun8Z2Deqy2wNxvFRNOjPczKQkYc1vDezP5OduJuF...", remember_token: "YhIUhgFm9iMewxdNOHJ45A", admin: false>

1.9.3-p392 :002 > user.name = "larry"
=> "larry"

1.9.3-p392 :003 > user.save
(0.2ms) begin transaction
User Exists (0.6ms) SELECT 1 AS one FROM "users" WHERE (LOWER("users"."email") = LOWER('auriepage@gmail.com') AND "users"."id" != 109) LIMIT 1
(0.1ms) rollback transaction
=> false

用户模型:

class User < ActiveRecord::Base

# Declaration of public variables
attr_accessible :email, :name, :password, :password_confirmation
has_secure_password
has_many :microposts, dependent: :destroy
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_users, through: :relationships, source: :followed
has_many :reverse_relationships, foreign_key: "followed_id", class_name: "Relationship", dependent: :destroy
has_many :followers, through: :reverse_relationships, source: :follower

before_save {email.downcase!}
before_save :create_remember_token

validates :name, presence: true, length: {maximum: 50}
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: {with: VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false}
validates :password, presence: true, length: {minimum: 6}
validates :password_confirmation, presence: true
after_validation {self.errors.messages.delete(:password_digest)}

private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end

最佳答案

您的用户模型可能有不满意的验证。由于您尚未发布这些内容,因此我无法真正解决您的问题。为了让生活更轻松,您可以调试用户不愿意保存的原因。

尝试运行

user.errors.full_messages

这应该会提示您出了什么问题。

关于ruby-on-rails - 为什么当我尝试 user.save 时我的 Rails 回滚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19037733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com