如何在 Rails Admin 中实现一个字段,在一种情况下显示下拉列表,否则显示字符串字段?

问题描述 投票:0回答:1

我正在尝试为 :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
的模型有问题。

我不想编辑视图,但我想做得更好。我将很高兴获得任何帮助!

ruby-on-rails ruby field rails-admin
1个回答
0
投票

我发现的唯一可行的选择是通过 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

如果有人有更好的想法,我会很高兴看到。

© www.soinside.com 2019 - 2024. All rights reserved.