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削除する必要があることに注意してください。そうしないと、2 つのネストされたフォームができてしまいます。semantic_form_foractive_admin_form_forform doadmin/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 に答える
0

これに関する別の考えは、dbにイベントがあるかどうかだけを確認したい場合は、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 に答える