Rails Mongodb 无法保存记录
Rails Mongodb can't save record
我在 Rails 应用程序中使用 Mongodb。我有 2 个模型,分别是 Account
和 User
。帐户有很多用户,用户属于帐户。
Account
型号
has_many :users, :inverse_of => :account, :dependent => :destroy
validates :organization_name, presence: true, uniqueness: true
User
型号
belongs_to :account, :inverse_of => :users
validates :account, :presence => false
validates :email, presence: true
has_secure_password
validates :password, length: { minimum: 6 }, allow_nil: true
def User.new_token
SecureRandom.urlsafe_base64
end
def self.create_with_password(attr={})
generated_password = attr[:email] + User.new_token
self.create!(attr.merge(password: generated_password, password_confirmation: generated_password))
end
User
控制器
def new
@user = User.find_by(params[:id])
@user = @current_user.account.users.new
end
def create
@user = User.find_by(params[:id])
@user = @current_user.account.users.create_with_password(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
format.js
else
format.html { render 'new' }
format.json { render json: @user.errors, status: :unprocessable_entity }
format.js { render json: @user.errors, status: :unprocessable_entity }
end
end
end
private
def user_params
params.require(:user).permit(:id, :email, :password, :password_confirmation, :owner, :admin)
end
我可以成功注册一个用户帐户。但是当我尝试添加新用户时,无法保存用户记录。我在创建新用户时为用户分配了密码。
错误信息:
message: Validation of User failed. summary: The following errors were found: Account can't be blank resolution: Try persisting the document with valid data or remove the validations.
如果我删除 self.create_with_password 并在表单中手动输入密码,它就可以了。所以我猜错误一定是在自己创建的密码中,好像没有保存记录。顺便说一下,我使用的是 Rails 5.0。有解决这个问题的想法吗?
嘿@ternggio 欢迎来到社区。
Account can't be blank.
由于 user.rb
中的 belongs_to
语句而出现此错误。
在rails > 5中默认需要belongs_to
,可以设置为可选,标记为optional: true
。
belongs_to :account, :inverse_of => :users, optional: true
并删除下面的行。
validates :account, :presence => false
希望这对您有所帮助。
我在 Rails 应用程序中使用 Mongodb。我有 2 个模型,分别是 Account
和 User
。帐户有很多用户,用户属于帐户。
Account
型号
has_many :users, :inverse_of => :account, :dependent => :destroy
validates :organization_name, presence: true, uniqueness: true
User
型号
belongs_to :account, :inverse_of => :users
validates :account, :presence => false
validates :email, presence: true
has_secure_password
validates :password, length: { minimum: 6 }, allow_nil: true
def User.new_token
SecureRandom.urlsafe_base64
end
def self.create_with_password(attr={})
generated_password = attr[:email] + User.new_token
self.create!(attr.merge(password: generated_password, password_confirmation: generated_password))
end
User
控制器
def new
@user = User.find_by(params[:id])
@user = @current_user.account.users.new
end
def create
@user = User.find_by(params[:id])
@user = @current_user.account.users.create_with_password(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
format.js
else
format.html { render 'new' }
format.json { render json: @user.errors, status: :unprocessable_entity }
format.js { render json: @user.errors, status: :unprocessable_entity }
end
end
end
private
def user_params
params.require(:user).permit(:id, :email, :password, :password_confirmation, :owner, :admin)
end
我可以成功注册一个用户帐户。但是当我尝试添加新用户时,无法保存用户记录。我在创建新用户时为用户分配了密码。
错误信息:
message: Validation of User failed. summary: The following errors were found: Account can't be blank resolution: Try persisting the document with valid data or remove the validations.
如果我删除 self.create_with_password 并在表单中手动输入密码,它就可以了。所以我猜错误一定是在自己创建的密码中,好像没有保存记录。顺便说一下,我使用的是 Rails 5.0。有解决这个问题的想法吗?
嘿@ternggio 欢迎来到社区。
Account can't be blank.
由于 user.rb
中的 belongs_to
语句而出现此错误。
在rails > 5中默认需要belongs_to
,可以设置为可选,标记为optional: true
。
belongs_to :account, :inverse_of => :users, optional: true
并删除下面的行。
validates :account, :presence => false
希望这对您有所帮助。