好的,因此在测试应用程序时出现ActiveSupport :: MessageVerifier :: InvalidSignature错误。我也是Ruby On Rails的新手。
在控制台中,这是我可以看到的:
ActiveStorage :: Attachment加载(1.2毫秒),从“ active_storage_attachments”中选择“ active_storage_attachments”。在“ active_storage_attachments”中。 “ record_id” =? AND“ active_storage_attachments”。“ record_type” =? AND“ active_storage_attachments”。“名称” =? LIMIT? [[“ record_id”,4],[“ record_type”,“ Project”],[“ name”,“ csi_upload”],[“ LIMIT”,1]] (0.5ms)回滚事务 在121毫秒内完成500个内部服务器错误(ActiveRecord:4.8毫秒)
无论我尝试更新:project_name,:project_city还是:csi_upload,都会发生错误。
我到目前为止所做的事情
当我第一次测试Rails 5.2附带的内置文件上传系统时,我设法使其正常工作。现在,几周后,即使我的代码与以前的代码相同,我也无法再次运行它,只是遇到了上面提到的错误(不幸的是,我无法向自己证明这一点)。我试图再回到一个最小的例子,但没有成功。
我知道该错误与上传有关,因为如果我注释掉中的行<%= f.file_field:csi_upload,标签:“ CSI upload”%>,则可以毫无问题地更新我的项目。 _ongoing_form.html.erb
我已经清除了active_storage_attachments和active_storage_blob表,所以它们都是空的(几周前,当我第一次尝试这样做时,其中的数据就是我管理的上载)。
我已经阅读了有关 attach 方法的信息,但是我不知道是否必须使用它,因为我设法在没有它的情况下使它能够工作一次。
视图-_ongoing_form.html.erb
<%= bootstrap_form_for(@project) do |f| %>
<%= f.text_field :project_name %>
<%= f.file_field :csi_upload, label: "CSI upload" %>
<div class="col-sm-4 col-sm-offset-4">
<%= f.submit "Update project", class: 'form-control login-button'%>
</div>
<% end %>
视图-edit.html.erb
<div class="container">
<%= render 'layouts/navigation' %>
<div class="row">
<div class="col-sm-6 col-sm-offset-3">
<h2>Edit Project</h2>
<%= link_to 'Back', projects_path %>
<p id="notice"><%= notice %></p>
</div>
<div class="col-sm-6 col-sm-offset-3">
<%= bootstrap_form_for(@project) do |f| %>
<%= f.text_field :project_city %>
<% if @project.status == 'Ongoing' %>
<div id="show">
<%= render(:partial => 'ongoing_form', project: @project) %>
</div>
<% end %>
<% end %>
</div>
</div>
模型-project.rb
class Project < ApplicationRecord
has_one_attached :csi_upload
enum status: [:Paused, :Ongoing, :Finished]
validates :project_name,
presence: true
validates :status,
presence: true
validates :project_city,
presence: true
end
控制器-projects_controller
def update
respond_to do |format|
if @project.update(update_project_params)
format.html { redirect_to @project, notice: 'Project was successfully updated.' }
format.json { render :show, status: :ok, location: @project }
else
format.html { render :edit }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
private
def update_project_params
params.require(:project).permit(
:project_name,
:project_city,
:csi_upload
)
end
任何帮助或指针都将受到高度赞赏。