簡體   English   中英

如何在Rails 4中使用參數初始化活動記錄?

[英]How to make active record initialize with params in Rails 4?

我正在使用Ruby on Rails 4,並且具有以下用戶模型:

require 'uuid'
UUID.state_file = false
UUID.generator.next_sequence

class User < ActiveRecord::Base
   attr_accessor :email, :password
   has_many :entries

   after_initialize do |user|
       user.entry_hash = UUID.new.generate
   end

end

這基於以下數據庫遷移:

class CreateUsers < ActiveRecord::Migration

def change
    create_table :users do |t|
        t.string "email"
        t.string "password"
        t.string "entry_hash"
      t.timestamps
    end

  end
end

我想自動生成一個uuid作為與該User關聯的哈希。

使用rails控制台創建新用戶,我執行以下操作:

1)我使用創建一個帶有電子郵件和密碼的用戶:

irb(main):001:0> u = User.create(:email=>'abc@gmail.com', :password=>'myPass')
   (0.1ms)  BEGIN
  SQL (0.6ms)  INSERT INTO `users` (`created_at`, `entry_hash`, `updated_at`) VALUES ('2013-12-07 22:32:28', '60744ec0-41bd-0131-fde8-3c07542e5dcb', '2013-12-07 22:32:28')
   (3.7ms)  COMMIT
=> #<User id: 2, email: nil, password: nil, entry_hash: "60744ec0-41bd-0131-fde8-3c07542e5dcb", created_at: "2013-12-07 22:32:28", updated_at: "2013-12-07 22:32:28">

2)但這很奇怪。 如果您看一下SQL,它只會插入entry_hash,並且輸出對象將email和password顯示為nil。 但是,當我嘗試訪問這些屬性時,我得到了放置的屬性。

irb(main):002:0> u.email
=> "abc@gmail.com"
irb(main):003:0> u.id
=> 2
irb(main):004:0> u.password
=> "myPass"
irb(main):005:0> u.entry_hash
=> "60744ec0-41bd-0131-fde8-3c07542e5dcb"

我是Ruby on Rails的新手,我知道背景中發生了一些神奇的事情,但是有人可以啟發我這里發生了什么嗎? 我只想創建一個帶有參數的對象。

干杯

更新:我通過刪除attr_accessor行解決了我遇到的問題。 有人知道為什么它能起作用嗎?

attr_accessor

  • 可以用於您不想直接存儲在數據庫中的值,這些值僅在對象的生存期內存在(例如密碼)。

  • 當您的數據庫中沒有列但仍想在表單中顯示字段時使用。 該字段是Rails模型中的“虛擬屬性”。

create方法在數據庫中創建行,並返回ruby對象。 這就是為什么通過變量訪問域u工作,它是活的,而控制台是開放的。 但是,沒有任何東西進入數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM