Cod*_*ick 2 forms ruby-on-rails paperclip http-status-code-405
我正在使用paperclip gem将文件上传到数据库.当我选择要上传的文件并去创建它时,下一页应该重定向到根路径.相反,我在浏览器中收到"Method Not Allowed".我打开开发工具,控制台说:无法加载资源:服务器响应状态为405(方法不允许)我的日志如下所示:
Started POST "/assets" for ::1 at 2015-08-20 10:41:11 -0400
Run Code Online (Sandbox Code Playgroud)
并一直挂钩,直到我回到另一页.
这是我的控制器
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
Run Code Online (Sandbox Code Playgroud)
这是我的模型:
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
Run Code Online (Sandbox Code Playgroud)
我正在使用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 %>
Run Code Online (Sandbox Code Playgroud)
405错误表示我正在执行Asset模型不支持的请求.我有资源:我的配置路由文件中的资产,当我运行rake路由时,我的所有RESTful路由都在那里.
我很感激这方面的任何帮助.
引起我注意的第一件事是你在/ assets处有一条路由,通常保留给Rails 资产管道.众所周知,Rails在报告此问题方面的信息量不大(请参阅有关rails core的问题10132和问题19996).
尝试将资产管道移动到另一个安装点,看看是否能解决您的问题.这可以通过将Rails.application.config.assets.prefix设置为/ assets之外的其他内容来完成.例如,在config/initializers/assets.rb中添加以下行:
Rails.application.config.assets.prefix = '/pipeline_assets'
Run Code Online (Sandbox Code Playgroud)