Skip to content

How to set default values

Trevor edited this page Aug 1, 2017 · 6 revisions

RailsAdmin always adds a blank entry in drop-downs, so if you are adding a new record using Rails Admin, it will be blank by default. To pre-select a default value however, e.g.please do it in your model definition, at initialization time:

class Team < ActiveRecord::Base
  ....
  after_initialize do
    if new_record?
      self.color ||= 'red' # be VERY careful with ||= and False values
    end
  end

  def color_enum
    ['white', 'black', 'red', 'green', 'blue']
  end
   ...
end

The "after_initialize" hook (or callback) triggers after a model record is instantiated. It will set the color value to 'red' for a new record and will leave it to its current value for an existing record (in the edit view).

Url Params

If you want to set a default value based on a URL param you can access the bindings object. The following example shows how to add a default message using the "message" URL param.

config.model Post do
  edit do
    field :message do
      def value
        bindings[:view].params["message"]
      end
    end
  end
end

current_user

Adding current_user as a default value adds an extra challenge. The controller layer knows about current_user, this information is not typically available in the model layer for use by after_initialize. And this is an intentional implication of the MVC architecture.

In RailsAdmin, you can assign a default value of current_user like this:

config.model Post do 
  edit do 
    field :user_id, :hidden do
      default_value do
        bindings[:view]._current_user.id
      end
    end
  end 
end

This was taken from these discussion threads:

One thing to be aware of, RailsAdmin hides :user_id when creating the :user belongs_to association. To get around this issue:

config.model Post do 
  edit do 
    configure :user do
      visible false
    end
  
    field :user_id, :hidden do
      visible true
      default_value do
        bindings[:view]._current_user.id
      end
    end
  end 
end

See the response by bbenezech in this issue for a detailed explanation:

https://github.com/sferik/rails_admin/issues/963

Some refinement may be required to avoid resetting the user of an existing item, if that's not desired.

Clone this wiki locally