我在活动管理员中获得了不可读的值@下拉菜单。 我有一个包含特定值(大约10个值)的属性,但是当我使用活动管理员创建该类的新对象时...首先它显示了不可读的下拉菜单 第二,它显示该属性为空,即使我选择了一些不可读的值.. 请帮忙
我的admin / Resident.rb页面: :
ActiveAdmin.register Resident do
permit_params :room_number,:roll_number,:name,:hostel,:hostel_id
index do
column :room_number
column :roll_number
column :name
column :hostel
actions
end
filter :name,:as => :string
filter :hostel, :as => :select
filter :room_number
filter :roll_number
form do |f|
f.semantic_errors *f.object.errors.keys
inputs 'Enter the student details' do
input :room_number
input :roll_number
input :name
input :hostel
actions
end
end
end
我有两种模式:旅馆和居民: 的 模型/ hostel.rb
class Hostel < ActiveRecord::Base
has_many :residents
end
models / resident.rb
class Resident < ActiveRecord::Base
belongs_to :hostel
validates :room_number,presence: true,uniqueness: {case_sensitive: false}
validates :roll_number,presence: true,uniqueness:{case_sensitive: false}
validates :name, presence: true,length:{ maximum: 50 }
validates :hostel,presence: true
def display_name
hostel
end
end
架构: : 驻地
create_table "residents", force: :cascade do |t|
t.string "room_number"
t.string "roll_number"
t.string "name"
t.string "hostel"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "hostel_id"
end
旅馆:
create_table "hostels", force: :cascade do |t|
t.string "hostel"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
答案 0 :(得分:3)
为了使文本可读,您可以重新实现“to_s”方法:
class Hostel < ActiveRecord::Base
#...
def to_s
self.name
end
end
但是,如果通常存在,活动管理员足够聪明,可以使用“名称”行。这个方法的不好的一面是你的日志中的任何地方等它将使用该名称。如果表[self.id,self.name].join('-')
的名称字段不唯一,那么hostels
之类的内容似乎更适合调试。
你的第二个问题是由以下两件事之一引起的:
检查你的params许可证,并允许“hostel_id”
确保您的<select name="model[hostel_id]" >
而非<select name="model[hostel]">
。这应该是自动完成的,如果不是,可能是因为你没有很好地定义两个模型中的链接has_many / belongs_to
。
最后,最后一种方法是你仍然可以将自己的集合作为f.input
的参数推送到活动的管理员中:
f.input :hostel_id, collection: Hostel.all.map{|x| [x.name, x.id]}
再一次,这应该自动完成。在你的情况下,它不是,所以仔细查看你的数据库架构。
快乐编码,
亚辛。
答案 1 :(得分:1)
class Hostel < ActiveRecord::Base
def display_name
name # or that code will return a representation of your Model instance
end
end