我在弄清楚如何在 Rails_Admin 界面中的模型列表视图中搜索关联时遇到问题。
背景资料:
- 模型:帖子、用户、中心和组织。
- 目标:用户使用通过集线器设备将 http 请求发布到数据库的设备进行发布。该数据库显示用户的帖子。帖子属于用户,用户通过属于集线器的设备发送帖子,集线器属于组织。
- 我想要完成的事情:在 rails admin 中,我想要一个 Post 模型的自定义字段来显示发布帖子的用户所属的组织。
- 当前问题:我可以使用 Post 模型的组织方法将 Post 的用户组织显示为字段中的字符串,但我无法在 Rails_admin 中创建可以使其可搜索的过滤器。在 Rails_Admin 中,将行添加
searchable :organization
到config.model Post do...field :organization do{}end...end
不起作用。
我真的很感激关于这个问题的任何建议。谢谢!
岗位型号:
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
用户型号:
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
集线器型号:
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
组织模式:
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 初始化器:
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