4

RoR の学習をトレーニングするためのデイリー ディール アプリを作成しています。

ディール フォームに、"featured" というブール フィールドがあります。チェックボックスをオンにすると、(ドラフトではなく) 取引が取り上げられます。

しかし、アクティブな管理者でディールを作成するときに、チェックボックスをオンにすると「true」になります (その部分は問題ありません) が、チェックしないと「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 migrationsに関するこのテキストを参照してください。

于 2013-09-21T09:07:57.993 に答える