3

在我的photos.rb文件中,我有:

ActiveAdmin.register Photo do
  form :partial => 'admin/forms/photo', :locals => { :events => Event.all }
end

在我的_photo.html.erb文件中,我希望能够访问事件的值,但似乎无法检测到。我怎样才能做到这一点?

根据评论中的要求,这是我的表格:

<% if events.any? %>
  <%= form_for [:admin, @photo], :validate => true do |f| %>
    <!-- insert a bunch of standard field divs here -->
    <div class="actions" style="margin-top: 20px">
      <% if @photo.new_record? %>
        <%= f.submit 'Create photo' %>
      <% else %>
        <%= f.submit 'Update photo' %>
      <% end %>
    </div>
  <% end %>
<% else %>
  <div style="font-size: 14px">
    You cannot add photos until you have added at least one event.
  </div>
<% end %>

我收到的错误消息是events.any?

Completed 500 Internal Server Error in 108ms

ActionView::Template::Error (undefined local variable or method `events' for #<#<Class:0x007fdb8e841b80>:0x007fdb8a93e7a8>)
4

3 回答 3

3
form do |f|
  f.render partial: 'admin/forms/photo', locals: { f: f, events: Event.all }
end

请注意,您需要从部分中删除form_for,semantic_form_foractive_admin_form_for,因为它将被 中的form do部分覆盖admin/photos.rb,否则将有两个嵌套形式。

部分示例:

# app/views/admin/forms/_photo.html.arb
if events.any?
  f.inputs do
    f.input :title, label: 'Etc'
    f.input :file
  end
  f.actions
else
  f.div 'You cannot add photos until you have added at least one event.', 
        style: 'font-size: 14px'
end
于 2015-04-23T10:20:13.237 回答
1
form do |f|
    render partial: 'admin/forms/photo', locals: { value: 'random_data' }
end

您可以使用f.render或仅使用render

请注意,partial:需要将本地人发送到表单

示例部分

#app/views/admin/forms/_photo.html.arb
active_admin_form_for [:admin, resource] do |f|
    f.semantic_errors *f.object.errors.keys

    f.inputs do
       f.input :name
       f.input :random if (value == 'random_data')
    end
   f.actions
end
于 2016-01-25T23:17:48.137 回答
0

对此的另一个想法,如果您只想检查数据库中是否有任何事件,您可以any直接拨打电话Class

<% if Event.any? %>
  do this
<% else %>
  do that
<% end %>

没有将变量发送到部分,上面的代码导致:

2.0.0p0 :004 > Event.any?
   (0.6ms)  SELECT COUNT(*) FROM "events"
 => true

并在没有本地人的情况下保留 ActiveAdmin 部分:

ActiveAdmin.register Photo do
  form :partial => 'admin/forms/photo'
end
于 2013-07-15T13:41:06.330 回答