我正在建立一个日常交易应用程序来训练学习RoR。
在我的交易表单中,我有一个名为“featured”的布尔字段。如果我勾选复选框,则会显示交易(而不是草稿)。
但是当我在主动管理我的交易创建时,如果我选中复选框,我确实得到'真'(那部分没问题),但如果我不检查它,我得'空'而不是'假'。
我不应该弄错吗?
以下是我的文件:
架构迁移:
create_table "deals", :force => true do |t|
t.string "title"
t.string "description"
t.boolean "featured"
t.integer "admin_user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
Active Admin上的表单(我认为它默认使用formtastic)
ActiveAdmin.register Deal do
controller do
with_role :admin_user
end
form do |f|
f.inputs "Content" do
f.input :description, :label => "Deal description"
f.input :title, :label => "Deal title"
end
f.inputs "Status" do
f.input :featured, :label => "Status of publication (draft or featured)"
end
f.inputs "Publisher" do
f.input :admin_user_id, :as => :select, :collection => AdminUser.all, :label => "Campaign Account Manager"
end
f.actions
end
end
任何人都知道为什么在“特色”栏中,当我在创建交易时未选中“特色”字段的复选框时,我可以读取“空”而不是“假”?
答案 0 :(得分:1)
我假设通过'空',你不是指文字,但你的意思是该字段没有价值或是空的。您没有为字段设置默认值或在其中输入任何数据,因此它是空的,或者在Ruby白话中,为零。要设置默认值,您可以执行以下操作:
create_table "deals", :force => true do |t|
t.string "title"
t.string "description"
t.boolean "featured" :default => false
t.integer "admin_user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
对于更复杂的值,还有其他设置默认值的方法。例如,如果要将datetime字段的默认值设置为当前时间,则可以使用before_create出口:
before_create :set_foo_to_now
def set_foo_to_now
self.foo = Time.now
end
或者,您可以确保在自己创建新记录时输入值。
作为参考,请参阅ActiveRecord migrations上的此文字。