Rails 之旅第 1 天:一个令人困惑的 Rails 错误信息
创始人
2024-03-02 06:09:06
0

今天,我开始了一个 Recurse Center 的班次学习!我认识了一些人,并开始了一个小小的有趣的 Rails 项目。我想我今天不会谈太多关于这个项目的实际内容,但这里有一些关于 Rails 一天的快速笔记。

一些关于开始的笔记

在建立 Rails 项目的过程中,我学到的主要是:

  1. 它默认使用 sqlite,你必须告诉它使用 Postgres。
  2. Rails 默认包含了大量的东西,你可以禁用。

我安装并 rm -rf Rails 大概 7 次后才满意,最后用了这个咒语:

rails new . -d postgresql --skip-sprockets --skip-javascript

主要是因为我想用 Postgres 而不是 sqlite,而且跳过 sprockets 和 javascript 似乎能让安装 Rails 的速度更快,而且我想如果我决定要它们的话,我可以在以后再安装。

官方的 Rails 指南真的很不错

我在创建我的 Rails 入门应用时主要参考了 2 个资源:

一个神秘的错误信息:undefined method 'user'

我喜欢 bug,所以今天我遇到了一个奇怪的 Rails 错误! 我有一些看起来像这样的代码:

@user = User.new(user_params)
@user.save

很简单吧?但当这段代码运行时,我得到了这个令人费解的错误信息:

undefined method `user' for # Did you mean? super

我对这里发生的事情感到超级困惑,因为我没有调用一个叫做 user 的方法。我调用的是 .save。什么嘛?!我对此感到困惑和沮丧,大概呆了 20 分钟,最后我看了看我的 User 模型,发现了这段代码:

class User < ApplicationRecord
  has_secure_password

  validates :user, presence: true, uniqueness: true
end

validates :user... 应该是一些 Rails 魔法,验证每个 User 都有一个 username,而且用户名必须是唯一的。但我犯了一个错,我写的是 user 而不是 username。我把这个问题解决了,然后一切都正常了!万岁。

我仍然不明白我应该如何调试这个问题:堆栈跟踪告诉我问题出在 @user.save 行,根本没有提到 validates :user 的事情。我觉得一定有办法调试这个问题,但我不知道是什么办法。

我学 Rails 的目的就是想看看 Rails 的魔力在实践中是如何发挥的,所以这是个很有意思的 bug,早早的就掉坑里了。

一个简单的用户管理系统

我决定在我的玩具应用中加入用户。我在网上搜索了一下,发现有一个非常流行的叫做 devise 的工具可以处理用户。我发现它的 README 有点让人不知所措,而且我知道想要在我的玩具应用中建立一个非常简陋的用户管理系统,所以我遵循了这个名为《Rails 5.2 中从零开始进行用户验证》的指南,到目前为止,这个指南似乎还不错。Rails 似乎已经有了一大堆管理用户的内置东西,我真的很惊讶于这本指南的短小和我需要写的代码之少。

我在实现用户功能的时候了解到,Rails 有一个内置的神奇的会话管理系统(参见 Rails 会话如何工作。默认情况下,所有的会话数据似乎都存储在用户电脑上的 cookie 中,不过我想如果 cookie 太大了,你也可以把会话数据存储在数据库中。

已经有了会话管理系统,有了 cookie 和用户,却不太清楚到底发生了什么,这肯定是有点奇怪的,但也是挺好玩的!我们会看看情况如何。我们将拭目以待。

明天:更多的 Rails!

也许明天我可以在实现我的有趣的 rails 应用的想法上取得一些进展!


via: https://jvns.ca/blog/2020/11/09/day-1--a-little-rails-/

作者:Julia Evans 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

ByeBug走得太深了。在...
要解决"ByeBug走得太深了。在'next'步进时进入了Ruby...
2025-01-12 20:02:27
不重新启动服务器进行Rai...
在Rails应用程序中,你可以使用Rails的配置文件和环境变量来...
2025-01-12 14:00:47
不知道如何编写Rubyon...
通常可以使用 ActiveRecord 提供的查询方法来编写查询语...
2025-01-12 03:01:25
不在Rails SQL数据...
在Rails中,你可以使用Active Record的方法来查询数...
2025-01-11 15:32:09
不影响Rails类命名空间...
在Rails中,类的命名空间是根据文件的目录结构来确定的。如果你希...
2025-01-11 07:30:11
不要在每个类方法中使用se...
在每个类方法中不使用self,并且不使用单例模式的解决方法是使用类...
2025-01-11 02:32:08

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...