I'm having a problem figuring out how to search across associations in the list views for models in the Rails_Admin interface.
Background information:
- Models: Post, User, Hub, and Organization.
- Objective: A user makes a post using a device which posts the http request through a hub device to the database. The database shows posts by users. A post belongs to a user, who sends the post through a device which belongs to a hub, and the hub belongs to an organization.
- What I want to accomplish: In rails admin, I would like a custom field for the Post model to show the organization to which the user who made the post belongs.
- Current problem: I can get the Post's User's organization to display as a string in the field by using the organization method for the Post model, but I can't make a filter in Rails_admin that can make this searchable. In Rails_Admin, adding the line
searchable :organizationtoconfig.model Post do...field :organization do{}end...enddoes not work.
I would really appreciate any advice on this matter. Thank you!
Post model:
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :hub
attr_accessible :hub_id, :user_id
before_validation :set_count
validates :hub_id, :presence => true
validates :user_id, :presence => true
validates :count, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
before_create :update_redis
def organization
self.hub.organization.name
end
def user_email
self.user.email
end
private
def user_email
self.user.email
end
end
User model:
class User < ActiveRecord::Base
belongs_to :organization
has_many :posts, :extend => User::Posts
accepts_nested_attributes_for :organization
attr_accessible :email, :password, :password_confirmation, :remember_me, :as => [:default, :admin]
attr_accessible :device_id, :organization_id, :role_ids, :as => :admin
attr_accessible :organization_attributes, :as => [:admin, :manager]
after_save :update_total
end
Hub model:
class Hub < ActiveRecord::Base
devise :token_authenticatable, :trackable
belongs_to :organization, :inverse_of => :hubs
has_many :posts
attr_accessible :location, :organization_id, :as => :admin
validates :organization, :presence => true
validates :location, :presence => true
before_save :ensure_authentication_token
end
Organization model:
class Organization < ActiveRecord::Base
attr_accessible :name, :street_address_1, :street_address_2, :city, :state, :zip_code, :goal_per_hour, :as => [:admin, :manager
]
has_many :hubs
has_many :posts, :through => :hubs, :extend => Organization::Posts
has_many :users
validates :name, :presence => true, :uniqueness => true
end
rails_admin.rb initializer:
config.model Post do
list do
filters [:user, :hub]
items_per_page 200
field :id do
column_width 50
end
field :count do
column_width 35
end
field :user do
column_width 50
end
field :user_email
field :hub do
column_width 50
end
field :organization do
label "Organization"
# searchable :organization # This line doesn't work!!
end
field :created_at do
strftime_format "%m/%d/%y %H:%M"
column_width 90
end
#field :updated_at do
# strftime_format "%m/%d/%y %H:%M"
# column_width 90
#end
end
show do
include_all_fields
field :user_email
field :organization_name, :string do
label "Organization"
end
end
end