我在activeadmin中使用批处理操作来显示表单,代码是
batch_action 'Assign something', form: {
abc: Abc.order('name ASC').map{|s| [s.name, s.id]}.uniq
} do |ids, inputs|
ids.each do |id|
job = Job.find(id)
# does something here
end
redirect_to :back, notice: "Congrats!!"
end
此代码生成完美的表单,但在此表单中,生成的下拉列表具有缓存值。也就是说,如果我们修改任何 Abc 记录的名称,则即使在刷新页面后,其更改也不会反映在表单中。
Form has following options
<option value="6">Bla</option>
<option value="7">Alliance</option>
在DB中编辑值Bla to Foo后,我们的表单仍显示相同的旧结果。虽然db中的值已经改变了。
After editing records. Though Bla should be changed to Foo now
<option value="6">Bla</option>
<option value="7">Alliance</option>
知道我哪里错了吗?
答案 0 :(得分:2)
根据这个doc,动态表单需要一个proc。
batch_action ('Assign something', form: ->{ {
abc: Abc.order('name ASC').map{|s| [s.name, s.id]}.uniq
} }) do |ids, inputs|
ids.each do |id|
job = Job.find(id)
# does something here
end
redirect_to :back, notice: "Congrats!!"
端
我认为块作为参数传递,而函数调用后的块与参数周围的()
相比不那么令人困惑(稍微)。它们不是必需的。