405尝试在rails中POST文件时出错

时间:2015-08-20 15:52:09

标签: ruby-on-rails forms paperclip http-status-code-405

我正在使用paperclip gem将文件上传到数据库。当我选择要上传的文件并去创建它时,下一页应该重定向到根路径。相反,我得到了#34; Method Not Allowed"在我的浏览器中。我打开Dev Tools,控制台说: 无法加载资源:服务器响应状态为405(方法不允许) 我的日志看起来像:

Started POST "/assets" for ::1 at 2015-08-20 10:41:11 -0400

并一直挂钩,直到我回到另一页。

这是我的控制器

class AssetsController < ApplicationController
# before_filter :authenticate_user!

def index 
 @assets = current_user.assets      
end

def show 
 @asset = current_user.assets.find(params[:id]) 
end

def new
 @asset = current_user.assets.build
end

def create 
 @asset = current_user.assets.build(asset_params) 
  if @asset.save
   flash[:success] = "The file was uploaded!"
   redirect_to root_path
  else
   render 'new'
 end
end

def edit 
 @asset = current_user.assets.find(params[:id]) 
end

def update 
 @asset = current_user.assets.find(params[:id]) 
end

def destroy 
 @asset = current_user.assets.find(params[:id]) 
end

private

def asset_params
 params.require(:asset).permit(:uploaded_file)

 end
end

这是我的模特:

class Asset < ActiveRecord::Base
belongs_to :user

has_attached_file :uploaded_file

validates_attachment_presence :uploaded_file
validates_attachment_size :uploaded_file, less_than: 10.megabytes   
end

我正在使用simple_form gem提交文件:

<%= simple_form_for @asset, :html => {:multipart => true} do |f| %> 
 <% if @asset.errors.any? %>
  <ul>
   <% @asset.errors.full_messages.each do |msg|%>
    <li><%= msg %></li>
   </ul> 
 <% end %>
<% end %>
<p> 
<%= f.input :uploaded_file %> 
</p> 
<p>
<%= f.button :submit, class: "btn btn-primary" %>
</p> 
<% end %>

405错误表示我正在执行Asset模型不支持的请求。我有资源:我的配置路由文件中的资产,当我运行rake路由时,我的所有RESTful路由都在那里。

我很感激这方面的任何帮助。

1 个答案:

答案 0 :(得分:7)

引起我注意的第一件事是你在/ assets处有一条路线,通常保留给Rails asset pipeline。众所周知,Rails在报告此问题方面的信息量不大(请参阅rails核心上的issue 10132issue 19996)。

尝试将资产管道移动到另一个安装点,看看是否能解决您的问题。这可以通过将Rails.application.config.assets.prefix设置为/ assets之外的其他内容来完成。例如,在config / initializers / assets.rb中添加以下行:

Rails.application.config.assets.prefix = '/pipeline_assets'