Linux中國

Rails 之旅第 1 天:一個令人困惑的 Rails 錯誤信息

今天,我開始了一個 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&apos; for #<User:0x00007fb6f4012ab8> 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中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國