【发布时间】:2011-11-17 23:57:44
【问题描述】:
我有一个模型Domain,它有一个文本字段names。
> rails g model Domain names:text
invoke active_record
create db/migrate/20111117233221_create_domains.rb
create app/models/domain.rb
> rake db:migrate
== CreateDomains: migrating ==================================================
-- create_table(:domains)
-> 0.0015s
== CreateDomains: migrated (0.0066s) =========================================
我将此字段设置为 序列化 到模型中的数组中。
# app/models/domain.rb
class Domain < ActiveRecord::Base
serialize :names, Array
end
为此模型创建 ActiveAdmin 资源
> rails g active_admin:resource Domain
create app/admin/domains.rb
然后,在 app/admin/domains.rb 中,我设置了各种块来处理序列化字段
# app/admin/domains.rb
ActiveAdmin.register Domain do
index do
id_column
column :names do |domain|
"#{domain.names.join( ", " ) unless domain.names.nil?}"
end
default_actions
end
show do |domain|
attributes_table do
row :names do
"#{domain.names.join( ", " ) unless domain.names.nil?}"
end
end
end
form do |f|
f.inputs "Domain" do
f.input :names
end
f.buttons
end
# before we save, take the param[:domain][:name] parameter,
# split and save it to our array
before_save do |domain|
domain.names = params[:domain][:names].split(",") unless params[:domain].nil? or params[:domain][:names].nil?
end
end
几乎一切都很好——我的名字在索引和显示视图中显示为逗号分隔。当我更新一条我的名称字段设置为“a,b,c”的记录时,before_save 会将其转换为一个数组,然后通过 ActiveRecord 序列化保存。
我无法解决的是如何将编辑表单以逗号分隔的列表放入文本字段中。我尝试使用部分和直接使用 formtastic 语法以及尝试通过 active_admin DLS 语法使其工作。有谁知道如何进行这项工作?
具体来说,如果我的 domain.names 字段中保存了以下数组:
# array of names saved in the domain active_record
domain.names = ["a", "b", "c"]
如何更改:
form do |f|
f.inputs "Domain" do
f.input :names
end
f.buttons
end
这样当edit 表单加载时,在文本字段中看到的是abc,而不是a,b,c。
【问题讨论】:
-
为什么不在模型中使用attr_setter和attr_getter,并实现转换字符串数组。你可以在那里处理它,我打赌你会在应用程序的其他部分需要它
标签: ruby ruby-on-rails-3 activeadmin