我正在尝试为 :value 字段实现以下逻辑: if :key == "test",则显示一个包含两个选项 ['option1', 'option2] 的下拉列表 在任何其他情况下,都会显示正常的行字段。
我期待这样的事情:
#Table name: settings
#key :string
#value :string
class Setting < ApplicationRecord
extend Enumerize
rails_admin do
edit do
field :value do
formatted_value do
if bindings[:object].key == "test"
enum do
['option1', 'option2]']
end
else
bindings[:view].text_field(:value, value: value)
end
end
end
end
end
end
但是此代码不起作用(对于所有字段,它显示一个下拉列表 ['option1', 'option2]']) 尝试过这样的事情:
bindings[:view].select_tag("value",binding[:view].options_for_select(["1", "2"], value))
但是
options_for_select
的模型有问题。
我不想编辑视图,但我想做得更好。我将很高兴获得任何帮助!
我发现的唯一可行的选择是通过 attr_accessor:
#Table name: settings
#key :string
#value :string
class Setting < ApplicationRecord
extend Enumerize
attr_accessor :extra_field
before_save :assign_extra_field_to_value
rails_admin do
edit do
field :value do
visible do
bindings[:object].key != "test"
end
end
field :extra_field, :enum do
label "Value"
visible do
bindings[:object].key == "test"
end
enum do
['option1', 'option2']
end
end
end
end
private
def assign_extra_field_to_value
self.value = extra_field if self.key == "test"
end
end
如果有人有更好的想法,我会很高兴看到。