在 ActiveAdmin 控制器中传递变量以编辑表单
Passing variable to edit form within ActiveAdmin controller
我正在尝试将一个相当大的配置散列传递到我的编辑表单中输入的数据选项属性中。我不想将整个内容放在一行中,而是想通过将整个散列移动到一个使其更具可读性的位置来整理页面。所以这基本上就是现在的样子:
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 或表单块中 binding.pry
的可用内容时,我看不到 @froala_options 变量。所有有处理 DOM 的方法。
我真的不想开始创建部分以使用 semantic_form_for 传递内容(除非我可以在此 AA 注册页面中使用它)。
我能做什么?
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
在 ActiveAdmin
中,当您的代码执行 form do..end
块时,它会进入 ActiveAdmin::Views::ActiveAdminForm
的上下文,这超出了控制器内定义的所有实例变量的范围(比如 @froala_options
)。
在这里你需要知道 AA 为那些实例变量定义了访问器,你可以从任何特定于视图的代码中访问它们。
所以解决方案非常简单:在视图上下文中使用访问器代替实例变量。
form title: 'New Page' do |f|
f.inputs do
...
f.input :content, as: :froala_editor, input_html: { data: { options: froala_options } }
...
end
actions
end
我正在尝试将一个相当大的配置散列传递到我的编辑表单中输入的数据选项属性中。我不想将整个内容放在一行中,而是想通过将整个散列移动到一个使其更具可读性的位置来整理页面。所以这基本上就是现在的样子:
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 或表单块中 binding.pry
的可用内容时,我看不到 @froala_options 变量。所有有处理 DOM 的方法。
我真的不想开始创建部分以使用 semantic_form_for 传递内容(除非我可以在此 AA 注册页面中使用它)。
我能做什么?
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
在 ActiveAdmin
中,当您的代码执行 form do..end
块时,它会进入 ActiveAdmin::Views::ActiveAdminForm
的上下文,这超出了控制器内定义的所有实例变量的范围(比如 @froala_options
)。
在这里你需要知道 AA 为那些实例变量定义了访问器,你可以从任何特定于视图的代码中访问它们。
所以解决方案非常简单:在视图上下文中使用访问器代替实例变量。
form title: 'New Page' do |f|
f.inputs do
...
f.input :content, as: :froala_editor, input_html: { data: { options: froala_options } }
...
end
actions
end