1

我是来自 Rails 背景的 hanami 新手,我想知道验证模型是否已在创建操作中持久化的最佳实践。

我创建了一个用户/创建操作,如下所示:

class Create
    include Web::Action

    def call(params)
          repository = UserRepository.new

          @user = repository.create(name: params[:user][:name], 
                                    email: params[:user][:email],
                                    type: 'standard')
          redirect_to '/users'
    end
  end

我想确保仅在成功创建用户时才重定向用户。我轨道,我会做这样的事情:

redirect_to '/users' if @user.persisted?

但这不是花见的做事方式。目前我正在这样做:

redirect_to '/users' if !@user.id.nil?

哪个可以完成工作,但看起来并不干净。用花见做这件事的最好方法是什么?

4

2 回答 2

4

尝试这样的事情。

def call(params)
  repository = UserRepository.new

  @user = repository.create(name: params[:user][:name], 
                            email: params[:user][:email],
                            type: 'standard')
  redirect_to '/users'
rescue Hanami::Model::Error
  # handle the error
end
于 2017-06-30T12:38:06.247 回答
2

ROM/Hanami 不能默默地丢弃你传递给 repo 的更改,它要么引发某种异常(Hanami::Model::Error在 hanami-model 的情况下),要么保留你的实体。也就是说,像这样的检查@user.id.nil?是完全多余的。

于 2017-07-01T00:32:53.093 回答