Rails视图中的嵌套模型

时间:2018-03-06 18:55:07

标签: ruby-on-rails ruby nested

如何在事件索引中正确嵌套事件图片,以便在发布event_pictures时可以查看它们?

这是我的模特

class EventPicture < ApplicationRecord
belongs_to :event
end

我正在以我的形式使用字段

 <%= f.fields_for :event_picture, @event.event_picture do |ff| %>

  <p>
    <%= ff.label :name  %><br>
    <%= ff.text_field :name %>
  </p>

  <p>
    <%=ff.label :url %>
    <%=ff.text_field :url %>
  </p>
  <% end %>

这是我的事件视图(索引):

<% if user_signed_in? %>
  <div class = "admincreate">
    <% if user_signed_in? %>
      <p> <button type="button" class="btn btn-primary"><%= link_to 'New event' , new_event_path(@events)%> </button> </p>
  </div>
<% end %>


    <% @events.each do |event| %>
      <% if user_signed_in? %>
        <div class =".btn-group-xs">
      <tr>
        <td> <button type="button" class="btn btn-primary"><%= link_to 'Show', event_path(event) %> </button>  </td>
        <td> <button type="button" class="btn btn-primary"><%= link_to 'Edit', edit_event_path(event) %> </button> </td>
        <td> <button type="button" class="btn btn-primary"><%= link_to 'Delete',event_path(event),
                      method: :delete,
                      data: { confirm: 'Are you sure?'} %> </button></td>
        </div>
      </tr>
      <% end %>
    <% end %>
</table>
<% end %>

<table>
<% @events.each do |event| %>
<tr>
        <td class = "content-overlap-right">
        <h1 class = "eventtitle"> <h1><%= event.title%> </h1>
        <p class = "eventlink"><b> <%= event.url %></b></p>
        <p class = "eventbody"><%= event.body%> </p>
        </td>
</tr>
<%end%>
</table>

这是我的控制器

def event_params
      params.require(:event).permit(:title, :url, :body, event_picture_attributes:
        [:id, :url, :name])
    end

我已尝试过1)event_pictures.URL(在我的@events.each do中)&amp;我每次都尝试过活动照片。

也许我错过了一个小细节或者已经离开了,但我对一般显示嵌套属性感到有点困惑。

感谢您的帮助!

编辑:我的最终目的是相关的event_picture将在删除事件时删除 - 以及每个发布的事件都显示事件图片。我假设有一个@event_picture.each do但是它看起来并不是很简单(当然,它必须是相关的事件图片)。

如果有人回答,我会尽力让其他人明白答案。

编辑:
这是我的routes.rb

resources :events do resources :event_pictures, shallow: true end

2 个答案:

答案 0 :(得分:0)

首先,如果您希望在销毁事件对象时销毁嵌套资源,请将:_delete添加到event_picture_attributes

要使嵌套资源正常工作,请使用rails form builder声明路由并创建表单。

请按照这些教程告诉我您是否遇到任何问题。

  

http://guides.rubyonrails.org/routing.html#nested-resources

     

http://guides.rubyonrails.org/form_helpers.html#nested-forms

答案 1 :(得分:0)

显示活动的图片:

<%= image_tag event.event_picture.url ... %>

要在事件模型中销毁图片:

has_one :event_picture, :dependent => :destroy