传递变量以在ActiveAdmin控制器中编辑表单

问题描述 投票:2回答:2

我正在尝试将相当大的配置哈希传递到编辑表单中输入的数据选项属性中。我没有把整个事情都放在一行中,而是希望通过将整个哈希移动到一个使其更具可读性的地方来整理页面。所以这基本上就是现在的样子:

  controller do
    before_action do
      @froala_options = {
        foobar: 'baz',
        key: Figaro.env.froala_key,
        image_upload_url: upload_image_path,
        image_upload_to_s3: true,
        imageUploadToS3: Rails.application.config.x.aws.s3_upload_defaults
      }
    end
  end


# Edit

  form title: 'New Page' do |f|
    f.inputs do
      f.input :country
      f.input :title
      f.input :slug
      f.input :content, as: :froala_editor, input_html: { data: { options: @froala_options } }
    end
    actions
  end

我尝试过使用:

controller do 
  def edit
    # options variable here
  end
end

controller do 
  def edit
    # options variable here
    edit!
  end
end

以及:

f.input :content, as: :froala_editor, input_html: { data: { options: proc { @froala_options } } }

..无济于事。

当我检查proc或form块中binding.pry可用的内容时,我无法看到@froala_options变量。所有的方法都是处理DOM的方法。

我真的不想开始使用semantic_form_for创建部分来传递内容(除非我可以在这个AA注册页面中使用它)。

我能做什么?

activeadmin
2个回答
3
投票

ActiveAdmin中,当你的代码执行form do..end块时,它会进入ActiveAdmin::Views::ActiveAdminForm的上下文,这超出了控制器内定义的所有实例变量的范围(如@froala_options)。

在这里,您需要知道AA定义了这些实例变量的访问器,您可以从任何特定于视图的代码中访问它们。

所以解决方案非常简单:在视图上下文中使用Accessor代替Instance Variables。

form title: 'New Page' do |f|
  f.inputs do
    ...
    f.input :content, as: :froala_editor, input_html: { data: { options: froala_options } }
    ...
  end
  actions
end

-2
投票
ActiveAdmin.register DslPort do
  form do |f|
    f.inputs do
      f.input :snmp_profile, as: :select, collection: @dsl_port.snmp_profiles
    end
    f.buttons
  end
end

要么

f.input :snmp_profile, as: :select, collection: DslPort.find(params[:id]).snmp_profiles
© www.soinside.com 2019 - 2024. All rights reserved.