Rails Mongodb не может сохранить запись - PullRequest
0 голосов
/ 06 февраля 2020

Я использую Mongodb в своем приложении Rails. У меня есть 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. Есть идеи, чтобы решить это?

1 Ответ

0 голосов
/ 06 февраля 2020

Hey @ternggio Добро пожаловать в сообщество.

Аккаунт не может быть пустым.

Эта ошибка появляется из-за заявления belongs_to в user.rb.

В рельсах> 5 belongs_to по умолчанию требуется, Вы можете установить опционально с маркировкой optional: true.

belongs_to :account, :inverse_of => :users, optional: true

и удалить ниже строки.

validates :account, :presence => false

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...