![](/img/trans.png)
[英]Rails: validates_length_of :allow_nil does not allow nil
[英]allow_nil: false does not work from rails console
新手在這里,嘗試在rails表單上添加一些ruby規則,特別是我不想允許創建一個項目,如果這個沒有名字
class Idea < ActiveRecord::Base
mount_uploader :picture, PictureUploader
belongs_to :project
validates :name, presence: true, allow_nil: false
end
如果我從我的應用程序創建一個新項目,可以順利運行,但如果我從rails控制台創建一個項目,則不會發生相同的情況。 如果在應用程序或rails控制台中創建了這個項目,我怎么能避免創建沒有名稱的項目?
問題是您必須設置allow_blank: false
而不是allow_nil: false
。
在Ruby中, empty string
not nil
。
"".nil?
#=> false
"".blank?
#=> true
像這樣更新您的模型
class Idea < ActiveRecord::Base
mount_uploader :picture, PictureUploader
belongs_to :project
validates :name, presence: true, allow_blank: false
end
如果您想知道nil
和blank
之間的差異,請參閱此SO帖子。
請參閱這些指南以了解allow_blank
從控制台試試: -
Idea.create(:name => "Something")
Rails控制台輸出: -
1.9.3-p385 :005 > c = CabinNumber.create(:name => "Something")
(0.2ms) begin transaction
SQL (1.1ms) INSERT INTO "cabin_numbers" ("created_at", "name", "status", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Sun, 25 May 2014 00:02:04 IST +05:30], ["name", "Something"], ["status", false], ["updated_at", Sun, 25 May 2014 00:02:04 IST +05:30]]
(139.6ms) commit transaction
=> #<CabinNumber id: 11, name: "Something", status: false, created_at: "2014-05-24 18:32:04", updated_at: "2014-05-24 18:32:04">
要么
idea = Idea.new(:name => "hello")
idea.save
Rails控制台輸出: -
1.9.3-p385 :007 > c = CabinNumber.new(:name => "hello")
=> #<CabinNumber id: nil, name: "hello", status: false, created_at: nil, updated_at: nil>
1.9.3-p385 :008 > c.save
(0.1ms) begin transaction
SQL (1.0ms) INSERT INTO "cabin_numbers" ("created_at", "name", "status", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Sun, 25 May 2014 00:02:57 IST +05:30], ["name", "hello"], ["status", false], ["updated_at", Sun, 25 May 2014 00:02:57 IST +05:30]]
(155.0ms) commit transaction
=> true
如果未提供名稱字段,則無法創建
1.9.3-p385 :003 > c = CabinNumber.create()
(0.2ms) begin transaction
(0.1ms) rollback transaction
=> #<CabinNumber id: nil, name: nil, status: false, created_at: nil, updated_at: nil>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.