Ruby on rails ActiveAdmin将资源从控制器传递到渲染
我正在使用ActiveAdmin构建一个rails应用程序,并希望为控制器中的自定义操作构建一个表单。我试图将@listings从一个集合_操作传递到渲染文件,从而允许我一次编辑多个记录。@listings基于ActiveRecord查询,该查询从URL中提取记录ID 它似乎成功地从URL访问了参数,并查询了数据库。但是,当表单送达浏览器时,它无法生成listing.title的值。有什么想法吗 这是我的Listing.rb:Ruby on rails ActiveAdmin将资源从控制器传递到渲染,ruby-on-rails,activeadmin,Ruby On Rails,Activeadmin,我正在使用ActiveAdmin构建一个rails应用程序,并希望为控制器中的自定义操作构建一个表单。我试图将@listings从一个集合_操作传递到渲染文件,从而允许我一次编辑多个记录。@listings基于ActiveRecord查询,该查询从URL中提取记录ID 它似乎成功地从URL访问了参数,并查询了数据库。但是,当表单送达浏览器时,它无法生成listing.title的值。有什么想法吗 这是我的Listing.rb: ActiveAdmin.register Listing do
ActiveAdmin.register Listing do
collection_action :batch_upload do
ids = params[:id]
@listings = []
@listings = Listing.find(ids)
render template: 'listings/edit_batch'
end
end
这是我的edit_batch.html.haml:
= semantic_form_for :listing, :url => {:controller => 'listings', :action => 'batch_upload'}, :html=>{:method=>:put} do |f|
-@listings.each do |listing|
=f.hidden_field :id, :value => listing.id
=f.input :title, :value => listing.title
=f.submit "Submit"
如果表单正确显示了
listing.id
,但未正确显示listing.title
,则我怀疑记录没有设置标题,或者列表没有标题属性
要进行检查,请运行Rails控制台并使用表单中的id查找记录:
$ Listing.find(1)
检查返回的对象是否缺少标题。我将代码更改为输入,这样它就可以直接访问其html并正常工作:
=f.input :title, :input_html => { :value => listing.title }
使用Formtastic的
输入
块可能有助于简化每个列表的输入。这样做将允许表单为每个列表对象创建属性字段
# edit_batch.html.haml
= semantic_form_for :listing, :url => {:controller => 'listings', :action => 'batch_upload'}, :html=>{:method=>:put} do |f|
- @listings.each_with_index do |listing, index|
f.inputs for: listing, for_options: { index: index } do |l|
= l.input :id, as: :hidden
= l.input :title
= f.submit "Submit"
:for
和:for_options
范围将字段输入到特定对象。因此表单显示id但不显示标题?是,它显示id,但不显示标题。我不确定字段名是否正确…他们在表单的每次迭代中都列出[id]和[title]。。感谢您的回复。。。我试过了,它会返回一个包含标题的记录……还有其他想法吗?好的,你有没有试过打印表单中的列表
,例如,在第2行之后?它会返回一张有标题的唱片吗?事实上,它会…这是什么意思?我的输入代码有问题吗?太好了!希望调试有帮助:)