ActiveAdmin将资源从Controller传递到Render

时间:2014-10-11 19:32:27

标签: ruby-on-rails activeadmin

我正在使用ActiveAdmin构建rails应用程序,并希望在控制器中为自定义操作构建表单。我试图将@listings从collective_action传递到渲染文件,允许我一次编辑多个记录。 @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"

3 个答案:

答案 0 :(得分:1)

如果表单正确显示listing.id但不是listing.title,那么我怀疑该记录没有设置标题,或者列表没有标题属性。

要检查,请运行Rails控制台并使用表单中的id找到记录:

$ Listing.find(1)

检查返回的对象以查看它是否缺少标题。

答案 1 :(得分:1)

我将代码更改为输入,以便它直接访问其html并运行:

=f.input :title, :input_html => { :value => listing.title }

答案 2 :(得分:0)

使用Formtastic的inputs块可能有助于简化每个列表的输入。这样做将允许表单为每个Listing对象创建属性字段。

# 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范围输入特定对象的字段。