如果 Session 不是 Active Record 模型,如何处理 :session 错误?

2024-01-28

没有会话模型。除了显示一般失败通知之外,如何创建有关表单提交失败原因的特定错误?

回想一下第 7.3.3 节,我们使用用户模型错误消息显示注册错误。这些错误与特定的 Active Record 对象相关,但此策略在这里不起作用,因为会话不是 Active Record 模型。相反,我们将在闪存中放置一条消息,以便在登录失败时显示。导轨教程 https://www.railstutorial.org/book/basic_login

控制器

class SessionsController < ApplicationController

  def new
  end

   def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      if user.activated?
        log_in user
        params[:session][:remember_me] == '1' ? remember(user) : forget(user)
        redirect_back_or user
      else
        message  = "Account not activated. "
        message += "Check your email for the activation link."
        flash[:warning] = message
        redirect_to root_url
      end
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

Form

<%= form_for(:session, url: login_path) do |f| %>
  <%= f.label :email %>
  <%= f.email_field :email, class: 'form-control' %>
  <%= f.label :password %>
  <%= f.password_field :password, class: 'form-control' %>
  <%= f.submit "Sign in", class: "btn btn-primary sessions" %>
<% end %>

参数传递如下:

于 2016-09-06 17:33:59 +0000 于 68.204.49.62 开始发布“/login” 2016-09-06T17:33:59.165393 + 00:00应用程序[web.1]:参数:{“utf8”=>“✓”,“authenticity_token”=>“DhKuJCjbeVgBOsQiujgd34540Vk3i5ouRFpAm8JnU9ZKWlMZhxN7VPnWJrfuuKmg FNTvsDfJNTXNLRpI1pHNebA==", "会话"=>{"电子邮件“=>”[电子邮件受保护] /cdn-cgi/l/email-protection", "密码"=>"[已过滤]", "remember_me"=>"0"}, "提交"=>"登录"}

编辑:所以我想到这样做?

def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user 
      if user.authenticate(params[:session][:password])
        if user.activated?
          log_in user
          params[:session][:remember_me] == '1' ? remember(user) : forget(user)
          flash.now[:success] = "Great job dude!"
          redirect_back_or user
        elsif !user.activated?
          message  = "Account not activated. "
          message += "Check your email for the activation link."
          flash[:warning] = message
          redirect_to root_url
        else
         flash.now[:danger] = "Something went wrong, please try again."
         render 'new'  
        end
      elsif !user.authenticate(params[:session][:password])
        flash.now[:danger] = "Incorrect password."
        render 'new'  
      else 
        flash.now[:danger] = "Something went wrong. Please try again."
        render 'new'
      end
    elsif !user 
      flash.now[:danger] = 'Incorrect email'
      render 'new'
    else  
      flash.now[:danger] = "Something went wrong, please try again or contact support."
      render 'new'
    end
  end

这可以通过尝试/错误测试来实现,但看起来并不理想/干燥。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果 Session 不是 Active Record 模型,如何处理 :session 错误? 的相关文章

  • 我可以在 render.js 上执行的视图中使用 CoffeeScript 吗?

    我需要做什么才能在 Rails JS 视图中使用 CoffeeScript 例如 def index format js render layout gt false end 我需要做什么才能让 Rails 使用index js coffe
  • 在 Rails 5 中结合 API 和 Web 视图

    从 Rails 5 开始 API gem 被合并进来 现在 如果我有 API 可以通过 AJAX 从网页调用 这会给我们留下什么 我正在这里寻找最佳实践 当然 我可以自己使用 JSON 序列化器创建一条路由 然后 就有可能将 API 调用完
  • 如何在自定义类上使用 ActiveModel 验证和回调?

    我正在尝试在自定义类上使用 ActiveModel 验证和回调 class TestClass include ActiveModel Validations define model callbacks validate attr acc
  • database.yml 的所有可能键是什么

    我刚刚发现reconnect true配置选项可以在database yml文件 还有哪些其他可能的配置选项 是否有所有选项的完整参考 已知的关键示例 default default adapter mysql2 encoding utf8
  • render_views 在 rspec 中做什么?

    我对 rspec 很陌生 对 Rails 也很陌生 在为控制器编写测试用例时 我注意到render views经常使用 这是做什么的 如果我不调用它会发生什么 它呈现控制器规范中的视图 如果不放置 render views 视图将不会渲染
  • 使用 Active Record 信誉系统 gem,当我按投票排序时不会发生排序

    遵循 RailsCast 的信誉系统 gem 我将以下代码添加到我的 microposts controller 中 def index microposts Micropost paginate page params page find
  • 如何使用 rspec 测试传递到 Rails 3 中的控制器的参数?

    我们的代码 describe GET show do it assigns the requested subcategory as subcategory do subcategory Subcategory create valid a
  • 处理不兼容的字符编码:UTF-8 和 ASCII-8BIT

    我在生产中遇到不兼容的字符编码错误 我尝试在本地重现它 但没有成功 这是错误消息 A ActionView Template Error occurred in controller name action name incompatibl
  • 为什么将 Backbone.js 与 Rails 结合使用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何用form_for设置动作?

    我在现有控制器上创建了一个新页面 我在控制器上添加了 2 个操作方法 prompt user 和 process feedback 所以我通过以下方式进入该页面 redirect to controller gt users action
  • docker环境下日志不保存到文件

    在我的生产环境中production rb 我已配置我的日志将保存到文件中 config logger Logger new log production log 当我在本地运行时 使用命令行启动服务器rails s e productio
  • 用于输入地址的自动完成文本框是个好主意吗?

    通过传统形式输入我的地址让我发疯 为什么我必须输入我的城市 州 and邮政编码何时可以从我的邮政编码推断出我的城市和州 从下拉列表中选择您的状态是一件很痛苦的事情 通常您无法使用 Tab 键进入它 您必须使用鼠标等 替代文本 http im
  • 如何在 Rails ActiveRecord 中的日期指定小于今天的条件

    我正在尝试找出如何提取我的集合中的所有记录的字段publish是真的并且expires比今天少 我有以下内容 但我认为小于部分不起作用 有人可以指出我正确的轨道吗 Announcement where publish true expire
  • Rails 3.1 中的嵌套表单

    我在嵌套表单方面遇到问题 rails 3 1 在应该渲染 fields for 块时不渲染 fields for 块 例如 在编辑现有记录时 由于我对自己的英语不够自信 我制作了一个小示例应用程序 新行动 def new manga Man
  • Rails 3.1 引擎迁移不起作用

    我正在创建一个带有迁移的 Rails 3 1 引擎 rake db migration 在该引擎和主机应用程序内运行良好 但我需要将此引擎包含到另一个 Rails 引擎中 第二个引擎包含用于测试的虚拟应用程序 我将这一行添加到该虚拟应用程序
  • Rails 中带有 text_field 的逗号分隔数组

    我有一些users可以有很多posts 并且每个帖子都可以有很多tags 我已经使用一个实现了拥有并属于许多帖子和标签之间的关系 创建新帖子时 用户可以使用逗号分隔的值列表对其进行标记 就像在 SO 上发布新问题时一样 如果任何标签尚不存在
  • Ruby on Rails 基本概念总结

    作为 Rails 的新手 我很难找到提供 Ruby on Rails 概要的网站或参考资料 我对 MVC ActiveRecord 以及诸如此类的东西有基本的了解 但我很难理解其中的一些关系和基础知识 例如 我需要注意哪些命名约定 控制器操
  • 如何避免ActiveRecord模型双重保存?

    型号 一 class One lt ActiveRecord Base before save do stuff private def do stuff two Two find 8 two field2 Value two save e
  • ActiveRecord::Fixture::FixtureError:表“books”没有名为“loves”的列

    奇怪的 Rails 问题 我有一个Book实体和用户可以Love a book 我的所有其他模型都很好并且通过了所有测试 但是在生成新模型之后Love模型和设置装置时 我突然遇到大量这些错误 ActiveRecord Fixture Fix
  • Rails3,从 cron 运行 rake 任务

    我从 cron 运行 rake 任务时遇到问题 我将其包装在 shell 文件中 当我从控制台执行此 shell 文件时 它工作正常 bin sh if ps ef grep v grep grep create all accounts

随机推荐

  • 在 JavaScript 中将一个枚举转换为另一个枚举

    EDIT 正如评论所暗示的 Enum 不是 JavaScript 的一部分 而是 TypeScript 的一部分 我故意留下原来的标题 因为有人可能会像我一样犯错误 我有两个具有相同键但不同值的枚举 enum RowStates editi
  • React Ref Form onSubmit 处理程序未触发

    我有一个表格 我尝试从不同的功能提交此表单 为此 我创建了一个ref 该引用在打印时具有正确的 HTML 节点 并且该节点还有一个submit方法 当调用此提交方法时 formNode submit 表单已提交 but the onSubm
  • 在R中合并4个具有不同列(变量)的数据对象

    所以最初我有以下对象 gt head gs year disturbance lek id complex tot male 1 2006 N 3T Diamond 3 2 2007 N 3T Diamond 17 3 1981 N bar
  • 将 R 绘图导入 LaTeX?

    我是 R 和 LaTeX 的新手 最近刚刚发现如何使用 R 绘制标准时间序列图并将其保存为 png 图像 我担心的是 将其保存为图像然后将其嵌入到 LaTeX 中会缩放它并使其看起来很难看 有没有办法制作Rplot 函数输出矢量图形并将其嵌
  • 获取特定类的每个 UL 元素的 ID

    Goal 从名为 SBUpdater 的 ul 类获取特定 HTML 元素 ul 的 id 值 Purpose 我的程序包含多个服务器 url 并从每个服务器 url 解析我需要的特定信息 ul 的每个 id 都包含服务器 url 的值 我
  • 如何从mongodb检索图像文件到html页面

    我已成功以二进制格式将图像文件存储在 mongodb 中 但是当我从 mongodb 获取图像时 我得到相同的二进制格式 但我需要这个图像文件 请有人可以帮忙 这是我使用的代码 def retrieve request db pymongo
  • C# 转换 Base64 -> byte[]

    我有一个Base64 byte 从流传输的数组 我需要将其转换为普通数组byte 这个怎么做 你必须使用Convert FromBase64String http msdn microsoft com en us library syste
  • 在 XCode 5 中查看类/协议层次结构

    我是从 Java 世界来到 iOS 的 Java 中最有用的功能之一就是 JavaDoc 可以轻松查看特定接口的所有实现者或特定类的后代 XCode 5中有类似的东西吗 是的 有符号导航器 但它显示所有类 协议的层次结构或仅显示特定于项目的
  • 具有基于类型的数据模板选择和绑定的内容呈现器

    我有一个绑定到项目列表的 ItemsControl 这些项目具有名称和值属性 value 属性的类型为 Object 以允许使用不同的数据类型 为了正确显示 value 属性 我将 ContentPresenter 与我可能使用的每种数据类
  • SAXParseException XML-20221 文本中的无效字符

    对于独立的 Java 应用程序 我们看到非常罕见的错误 其中包含有效 XML 内容的字符串导致 JAXB 抛出异常 例如 javax xml bind UnmarshalException with linked exception org
  • 如何刷新打印功能的输出?

    我如何强制Pythonprint函数将缓冲输出刷新到屏幕 See also Disable output buffering https stackoverflow com questions 107705 if the goal is t
  • 如何从 Flex - AIR 执行 ping 操作?

    我很无聊 因为我的开发服务器宕机了 我正在运行命令提示符来无限期地 ping 服务器 这样我就能看到它们何时停止超时 并知道我可以再次工作 与此同时 我想制作一个 Air 应用程序来为我做这件事 这样我就可以让它发出鸣叫声或警报 或者在它开
  • 视图应该依赖于它的控制器吗? (ASP.NET MVC)

    这里有一个关于 ASP NET MVC 的设计 使用的问题 在html帮助器类中 您可以通过Html ViewContext Controller获取当前控制器 此外 您可以从 html 帮助器类获取请求 路由集合等 这不违背MVC的规则吗
  • 使用 R 进行荷兰语情感分析

    在 RStudio 中 我有一列包含Dutch我想通过情感分析添加 1 0 和 1 0 之间的极性分数的句子 我已经尝试过使用pattern nlp来自 jwfijffels 的软件包 但这对我不起作用 我找到了一个关于https gith
  • 如何使用 JQuery 使文本框在更改时启用和禁用

    我有一段 html 代码和脚本代码 我需要解决方案来处理一个文本框的更改事件 该事件禁用在另一个文本字段中输入数据的行为 任何人都可以帮我解决一下吗 div class leaf div
  • 如何连接到本地 cassandra 数据库

    我有一个本地运行的 cassandra 数据库 我可以在 Ops Center 中看到它正在运行 但是 当我打开开发中心并尝试连接时 我收到一个神秘的 无法连接 错误 如何获取通过开发中心连接到此本地 cassandra 数据库所需的确切名
  • Vagrant 和 Ansible 的“跳过:没有匹配的主机”问题

    我已经安装了 Vagrant VirtualBox 和 Ansible 并尝试在一台主机上运行配置 但它总是返回 正在跳过 没有匹配的主机 我的剧本文件的头部如下所示 hosts webservers user vagrant sudo y
  • 加速度计/陀螺仪数据的核心运动和频率的推送方法

    当使用推送方法获取加速度计 陀螺仪 设备运动数据时 不幸的是陀螺仪和设备运动最大频率平均不能超过72Hz 实际上数据也根本不是周期性的 更糟糕的是 如果只记录陀螺仪数据 不启动设备运动更新服务 即仅使用 motionManager star
  • 实体框架6和空间数据

    我有具有空间数据类型的数据库 我使用数据库优先模型和实体框架 6 0 2 和 NET 4 5 当我尝试使用生成的类时 出现以下错误 指定的架构无效 错误 未加载关系 Name FK1 因为类型 Model TypeB 不可用 以下信息可能有
  • 如果 Session 不是 Active Record 模型,如何处理 :session 错误?

    没有会话模型 除了显示一般失败通知之外 如何创建有关表单提交失败原因的特定错误 回想一下第 7 3 3 节 我们使用用户模型错误消息显示注册错误 这些错误与特定的 Active Record 对象相关 但此策略在这里不起作用 因为会话不是