Когда я делаю user.file.attach (params [: file]), он не сохраняется при использовании активного хранилища - PullRequest
0 голосов
/ 24 июня 2019

Я получаю эту ошибку со строкой @ user.file.attach (params [: file]):

ActiveRecord :: RecordNotSaved в UsersController # runFile.Не удалось сохранить новый связанный file_attachment.

Я использую активное хранилище для хранения файлов.

В моей модели пользователя у меня есть этот код:

has_one_attached :file

в моих пользователяхКонтроллер, у меня есть этот код:

def runFile 
```
  @user.file.attach(params[:file])
```
end

```
def user_params
    params.require(:user).permit(:file)
end

в моей форме в представлениях У меня есть этот код:

<%= form_with(model: user, local: true) do |form| %>
  <% if user.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(user.errors.count, "error") %> prohibited 
              this user from being saved:</h2>

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

   <div class="field">
     <%= form.label :file %>
    <%= form.file_field :file %>
  </div>
 <br> 

  <h6 class="actions">
    <%= form.submit "Create" %>
  </h6> 
<% end %>

Это моя форма показа, так как для каждого пользователя вы нажимаете Запустить файл дляМетод runFile:

<p id="notice"><%= notice %></p>
    <%= link_to "Run File", runFile_path, method: :post %>


<%= link_to 'Edit', edit_user_path(@user) %> |
<%= link_to 'Back', users_path %>

1 Ответ

0 голосов
/ 24 июня 2019

Я думаю, что вы смешали несколько вещей.

Для отображения формы вам нужна обычная ссылка (без method). В вашем случае это будет runFile. Однако runFile отвечает только за отображение формы. Вам нужен другой метод, который будет обрабатывать действие отправки формы. Аналогично методам edit и update.

Вот идея, как это может выглядеть:

def runFile_form
  # do whatever you need to display the form
end

def runFile
  @user.file.attach(params[:file])
end

def user_params
  params.require(:user).permit(:file)
end

В маршрутах укажите маршрут GET для метода runFile_form и используйте его на странице показа:

<%= link_to "Run file", runFile_form_path %>
...