当我将照片提交到Rails 3.0照片库网站时。除了能够上传文件,从下拉列表中选择相册,我需要能够传递逗号分隔标签列表。我对form_for的正确使用感到困惑。注意:这是在new.html.erb视图中(以及PhotoController的新方法)
<%= form_for(@photo) do |f| %>
<% if @photo.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@photo.errors.count, "error") %> prohibited this photo from being saved:</h2>
<ul>
<% @photo.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.label :album_id %>
<%= select "photo", "album_id", @albums.map {|a| [a.name,a.id]} %><br />
<%= f.label :name %>
<%= f.text_field :name %><br />
<%= f.label :photofile %>
<%= f.file_field :photofile %><br />
<%= f.label :tags %>
<%= f.text_field :tags %><br />
<%= f.submit %>
<% end %>
我对我能够(1)上传文件的正确方法感到困惑 - 我是用f.file_field走向正确的道路。 photofile实际上并不是Photo对象的属性。和(2)类似的问题:标签 - 标签不是Photo对象的属性所以它应该是f.text_field(3)我假设我正在做Album下拉的方式是正确的(我希望?)< / p>
答案 0 :(得分:3)
请记住,您可以在form_for中创建任何字段,就像任何其他表单一样。
通过生成名称为photo[name]
的字段来帮助您的表单
但您可以使用text_field_tag :tags
并在控制器上使用params[:tags]
检索它而不会出现问题。
如果该字段不是来自您的模型,则不应使用f.<helper>
只使用适合您的数据的text_field_tag
之类的其他帮助,如果您愿意,也可以使用纯HTML。
答案 1 :(得分:2)
首先,您需要说:multipart =&gt;在您的form_for电话中为true。这表示表单有附件。然后,对于附件,请使用paperclip或carrierwave之类的宝石。查看这些railscast,以获得有关如何使用paperclip和carrierwave的精彩介绍。
标记this railscast是一种有用的资源。