Rails 3.0 - form_for и поля вне текущей модели - PullRequest
2 голосов
/ 24 августа 2011

Когда я отправляю фотографию на сайт фотогалереи 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.На самом деле фотофайл не является собственностью объекта Photo.И (2) похожий вопрос с: tags - tags не является свойством объекта Photo, поэтому должно быть f.text_field (3) Я предполагаю, что способ, которым я делаю выпадающий список Альбомов, правильный (надеюсь?)

Ответы [ 2 ]

3 голосов
/ 24 августа 2011

Помните, что вы можете создавать любые поля внутри form_for, как и любую другую форму.

Форма просто помогает вам, генерируя поля с именами вроде photo[name] но вы можете использовать text_field_tag :tags и на контроллере получить его с помощью params[:tags] без проблем.

Если поле не из вашей модели, вы не должны использовать f.<helper>, просто используйте другого помощника, такого как text_field_tag, подходящего для ваших данных, или даже чистый HTML, если хотите.

2 голосов
/ 24 августа 2011

Во-первых, вы должны сказать: multipart => true в вызове form_for. Это говорит о том, что форма имеет привязанность. Затем для вложений используйте драгоценный камень, например скрепка или carrierwave . Ознакомьтесь с этими сообщениями, чтобы узнать, как использовать скрепку и carrierwave .

Для пометки этот Railscast является полезным ресурсом.

...