Rails 3.0 - form_for和当前模型之外的字段

时间:2011-08-24 12:28:32

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

当我将照片提交到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>

2 个答案:

答案 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。这表示表单有附件。然后,对于附件,请使用paperclipcarrierwave之类的宝石。查看这些railscast,以获得有关如何使用paperclipcarrierwave的精彩介绍。

标记this railscast是一种有用的资源。