Ruby on rails ActiveAdmin将资源从控制器传递到渲染

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构建一个rails应用程序,并希望为控制器中的自定义操作构建一个表单。我试图将@listings从一个集合_操作传递到渲染文件,从而允许我一次编辑多个记录。@listings基于ActiveRecord查询,该查询从URL中提取记录ID

它似乎成功地从URL访问了参数,并查询了数据库。但是,当表单送达浏览器时,它无法生成listing.title的值。有什么想法吗

这是我的Listing.rb:

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行之后?它会返回一张有标题的唱片吗?事实上,它会…这是什么意思?我的输入代码有问题吗?太好了!希望调试有帮助:)