我有两个模型Event
和Photo
具有以下关系:
事件
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 %>
答案 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 %>