我正在尝试将相当大的配置哈希传递到编辑表单中输入的数据选项属性中。我没有把整个事情都放在一行中,而是希望通过将整个哈希移动到一个使其更具可读性的地方来整理页面。所以这基本上就是它现在的样子:
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注册页面中使用它)。
我该怎么办?
答案 0 :(得分:3)
在var mime = require('mime'); // npm install mime
fs.readFile('public/images/2.jpg', { encoding: 'base64'}, function(err, data){
if(err){
console.log(err);
}else{
// get the mimetype
var filemime = mime.lookup(filepath);
// make string data
var base64= 'data:' + filemime + ';base64,' + data;
// do somthing with base64 string
}
});
中,当您的代码执行ActiveAdmin
块时,它进入form do..end
的上下文,这超出了控制器内定义的所有实例变量的范围(如ActiveAdmin::Views::ActiveAdminForm
)。
在这里,您需要知道AA为这些实例变量定义访问者,您可以从任何特定于视图的代码中访问它们。
所以解决方案非常简单:在视图上下文中使用Accessor代替Instance Variables 。
@froala_options
答案 1 :(得分:-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