如何在索引视图中包含模型

时间:2013-06-13 01:07:25

标签: ruby-on-rails ruby ruby-on-rails-3

我有两个模型EventPhoto具有以下关系:

事件

has_many :photos
accepts_nested_attributes_for :photos, :allow_destroy => true

照片

belongs_to :event

当我在Event#new控制器中创建它时,我有以下

@event = Event.new
@event.photos.build

这是表单

中的Event#form视图
<%= form_for(@event) do |f| %>
...
  <%= fields_for :photos do |photo| %>
    <%= photo.file_field :picture %>
  <% end %>
<% end %>

现在我想要添加第一张照片,因为您可能有多个与此相关的设置要显示在Event#index中。

我试试这个,但似乎失败了:

<% @events.each do |event| %>
  <% event.photos.first do |pict| %>
    <%= pict.image... %>
  <% end %>
<% end %>

3 个答案:

答案 0 :(得分:0)

您可能需要添加:multipart =&gt;如果表单中有文件字段,则对于form_for块为true。这可以解释为什么它不上传。

答案 1 :(得分:0)

我猜它没有做任何事情,因为#first不会阻止。尝试

<%= event.photos.first.image... %>

event.photos.first返回一个对象,并将一个块(例如do | photo | ... end part)传递给一个对象并没有真正做任何事情。

顺便说一下,如果你更详细地介绍“失败”的含义,那将会很有帮助。你有堆栈跟踪吗?页面上没有显示任何内容?您是否在控制台中验证了您的Event对象有一个或多个照片?

答案 2 :(得分:0)

<%= fields_for :photos do |photo| %>更改为<%= f.fields_for :photos do |photo| %>

<% event.photos.first do |pict| %>错了 - 只需获取第一张图片并尝试访问它(如果存在):

<% pict = event.photos.first %>
<% if pict %>
code here
<% end %>