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