gpt4 book ai didi

ruby - 您如何处理 Active Admin 资源中的序列化编辑字段?

转载 作者:数据小太阳 更新时间:2023-10-29 06:45:17 27 4
gpt4 key购买 nike

我有一个模型,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 中,我设置了各种 block 来处理序列化字段

# 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

几乎一切都很好——我的名字在索引和显示 View 中显示为逗号分隔。当我更新一条记录并将我的名称字段设置为“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.

最佳答案

下面是我如何处理这种情况的总结。我向模型添加了一个访问器,它可以将数组转换为由换行符连接的字符串,并将其拆分回数组。

# app/models/domain.rb
class Domain < ActiveRecord::Base
serialize :names, Array
attr_accessor :names_raw

def names_raw
self.names.join("\n") unless self.names.nil?
end

def names_raw=(values)
self.names = []
self.names=values.split("\n")
end
end

然后,在我的域管理资源中,我没有使用 :names 字段,而是使用了 :names_raw 字段。设置此值将使用新值保存名称数组。

# app/admin/domains.rb
form do |f|
f.inputs "Domain" do
f.input :names_raw, :as => :text
end
f.buttons
end

关于ruby - 您如何处理 Active Admin 资源中的序列化编辑字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8176104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com