Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 找不到没有ID的用户,通知程序_Ruby On Rails - Fatal编程技术网

Ruby on rails 找不到没有ID的用户,通知程序

Ruby on rails 找不到没有ID的用户,通知程序,ruby-on-rails,Ruby On Rails,我正在做一个简单的邮件发送,带有一条消息和一个主题,当我想将邮件发送到目标邮件时,我得到以下错误,没有ID找不到用户 我有以下代码: app/mailers/notifier.rb: def envio_邮件主题、邮件、用户 @user=user.finduser @缪斯=用户 @body_message=消息 mail:to=>@user.email,:subject=>subject 终止 app/controllers/gratides_controller.rb: def创建 @感激之情

我正在做一个简单的邮件发送,带有一条消息和一个主题,当我想将邮件发送到目标邮件时,我得到以下错误,没有ID找不到用户

我有以下代码:

app/mailers/notifier.rb: def envio_邮件主题、邮件、用户 @user=user.finduser @缪斯=用户 @body_message=消息 mail:to=>@user.email,:subject=>subject 终止 app/controllers/gratides_controller.rb: def创建 @感激之情 user=params[:user\u id] Notifier.envio_mailparams[:subject],params[:message],user.deliver 回应待办事项|格式| 如果@感恩。保存 format.html{重定向_to@gratitude,:notice=>“感谢已成功创建”。} format.xml{render:xml=>@感恩,:status=>:created,:location=>@感恩} 其他的 format.html{render:action=>new} format.xml{render:xml=>@permission.errors,:status=>:unprocessable_entity} 终止 终止 终止 这就是错误:

在2020年2月26日17:10:55-0500时开始127.0.0.1的邮政/免费 GratiudeSController处理创建为HTML 参数:{utf8=>✓, 真实性令牌=>iofCtlwd5CE5Zbuo5n6NzCo4Inksht4o05OiiwYUY24=,感激=>{subject=>asdasd,message=>asda

,用户id=>4},commit=>Enviar mensaje} 模式0.6ms显示表格 客户端参数化加载0.2ms从“客户端参数化”限制1中选择“客户端参数化”。* 用户加载0.2ms从“用户”中选择“用户”。“用户id”=1限制1 配置文件加载0.2ms从“配置文件”中选择“配置文件”。`id`=1限制1 130ms内未找到完成的404 ActiveRecord::RecordNotFound找不到没有ID的用户: app/mailers/notifier.rb:405:in'envio_mail' app/controllers/gratizes_controller.rb:48:in“create” 在您的参数中,感恩=>{subject=>asdasd,message=>asda

,user_id=>4}

用户\u id嵌套在内部,请执行此操作以获取用户\u id

暗示

要确保邮件仅在成功创建感谢时发送,可以将邮件触发器移动到感激模型中的after_commit回调

after_commit :send_mail, on: :create

def send_mail
  Notifier.envio_mail(subject, message, user_id).deliver
end
感恩模式

after_commit :send_mail, on: :create

def send_mail
  Notifier.envio_mail(subject, message, user_id).deliver
end

希望有帮助

仅当用户输入实际有效时才应发送电子邮件

 def create
  @gratitude = Gratitude.new(gratitude_params)
  respond_to do |format|
    if @gratitude.save
      Notifier.envio_mail(@gratitude.subject, @gratitude.message, @gratitude.user).deliver
      format.html { redirect_to(@gratitude, notice: 'Gratitude was successfully created.') }
      format.xml  { render xml: @gratitude, status: :created, location: @gratitude }
    else
      format.html { render :new }
      format.xml  { render xml: @gratitude.errors, status: :unprocessable_entity }
    end
  end
end

# ...

private

def gratitude_params
  params.require(:gratitude)
        .permit(:subject, :message, :user_id)
end

这假设您的感恩模型中有某种验证,用于验证用户id、主题和消息的存在。

这仍然不能解决一个事实,即如果未传递该参数,则根本没有错误处理。一个创可贴不能修复枪伤。OP并不是在验证或错误处理方面寻求帮助。”阿丹很肯定,OP很快就会回来,因为这只是一个管道胶带解决问题的方法。它是有效的,但是如果你不关心处理错误……没关系,答案是有效的,在我的例子中,我需要一个关于发生了什么的简要解释。我真的很感谢你的帮助为什么你的模型应该负责发送电子邮件而不是仅仅安装控制器?我真的会考虑这样做。模型回调的问题在于,在测试和发送电子邮件时,模型的责任不应包括在任何地方。你是对的,昨天我快速查看了出现的第一个答案,今天平静地看到,我看到这个答案有我真正需要的,显然,没有怀疑其他解决方案