4

我正在构建一个日常交易应用程序来训练学习 RoR。

在我的交易表单上,我有一个名为“精选”的布尔字段。如果我选中该复选框,则会显示交易(而不是草稿)。

但是当我在活动管理员上创建我的交易时,如果我选中复选框,我会得到 'true' (那部分没问题),但如果我不选中它,我会得到 'empty' 而不是 'false'

我不应该是假的吗?

这是我的文件:

架构迁移:

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

任何人都知道为什么在创建交易时不选中“精选”字段的复选框时,为什么在“精选”列中我可以读取“空”而不是“假”?

4

1 回答 1

1

我假设“空”不是指文字,而是指该字段没有值或为空。您没有为该字段设置默认值,也没有在其中输入任何数据,因此它是空的,或者在 Ruby 语言中是 nil。要设置默认值,您可以执行以下操作:

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 迁移的文本。

于 2013-09-21T09:07:57.993 回答