Как добавить поля для формы с помощью драгоценного камня ‘carrierwave’?

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я знаком с таким кодом, как

 Video.create(title: 'title') 
  

что, если вы добавите к этому, вы могли бы добавить больше значений при создании записи

 Video.create(title: 'title', value: 'value') 
  

Я пытаюсь выяснить, как это сделать с помощью драгоценного камня ‘carrierwave’, но поскольку форма была сгенерирована автоматически, я не уверен, как ее настроить. Например, как бы мне добавить значение ‘value’, которое будет добавлено в таблицу Videos, предполагая, что столбец существует.

_form.html.erb

 <%= form_for(@video) do |f| %>
  <% if @video.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@video.errors.count, "error") %> prohibited this video from being saved:</h2>

      <ul>
      <% @video.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </div>

  <div class="field">
    <%= f.label :file %><br>
    <%= f.file_field :file %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
  

new.html.erb

 <h1>New Video</h1>

<%= render 'form' %>

<%= link_to 'Back', videos_path %>
  

Видеоконтроллер

 def new
  @video = Video.new
end

def create
  @video = Video.new(video_params)

  respond_to do |format|
    if @video.save
      format.html { redirect_to @video, notice: 'Video was successfully created.' }
      format.json { render :show, status: :created, location: @video }
    else
      format.html { render :new }
      format.json { render json: @video.errors, status: :unprocessable_entity }
    end
  end
end
  

Ответ №1:

вы хотите сохранить загруженное видео в value поле, верно? В этом случае вы можете использовать value в качестве имени поля файла. Также убедитесь, что вы смонтировали загрузчик, как показано ниже :

  mount_uploader :value, VideoUploader
  

где VideoUploader — это имя загрузчика.

смотрите как загружать видео с помощью Carrierwave