jquery – 从Rails 3升级后不允许使用Rails 4方法

我有一个现有的代码库,我试图从Rails 3.2升级到Rails 4.0

我有一个名为assets_controller的控制器,带有’create’方法,我的路由文件中有一个条目:

resources :assets

在前端使用Jquery,如果我从一个浏览器向’/ assets’发送一个post请求,我得到405(Method Not Allowed):

$.ajax({method: 'POST',data: asset,url: '/assets' });

这在Rails 3中运行得很好,我似乎无法弄清楚问题是什么.

更新:

这是我的控制器的简化版本:

class AssetsController < ApplicationController
  skip_before_filter :verify_authenticity_token 
    def create
        # params[:assets] is passed if a mass addition of assets (i.e. book) occurs
        assets = []
        if params[:assets]
          assets = params[:assets]
        else
          assets.push params
        end

        last_asset_id = 0

        assets.each do |asset_data|
          asset = Object.const_get(asset_data[:asset_type]).new(asset_data)
          if !asset.save
            json_false_errors(asset.errors.full_messages)
            return
          else
            last_asset_id = asset.id
          end
        end
      end
end

继承人’rake routes’的输出

assets GET        /assets(.:format)                                        assets#index
                                          POST       /assets(.:format)                                        assets#create
                                new_asset GET        /assets/new(.:format)                                    assets#new
                               edit_asset GET        /assets/:id/edit(.:format)                               assets#edit
                                    asset GET        /assets/:id(.:format)                                    assets#show
                                          PATCH      /assets/:id(.:format)                                    assets#update
                                          PUT        /assets/:id(.:format)                                    assets#update
                                          DELETE     /assets/:id(.:format)                                    assets#destroy

继承我的开发日志:

Started POST "/assets" for 127.0.0.1 at 2015-05-27 09:39:42 -0400

(是的,那就是所有日志都有)

发布数据:
{
“ASSET_TYPE”: “文件”,
“头衔”: “DNS”,
heading_id”:9999,
“版权保护”:假的,
“URL”: “https://confidental.url”,
“pubtitle”: “DNS”,
“作者”:””}

一个编辑:
我将整个路径文件注释掉以用于诊断目的,这些是进行一些手动测试的结果:

POST http://localhost:8000/assets 405 (Method Not Allowed)
POST http://localhost:8000/asset 404 (Not Found)
POST http://localhost:8000/ass 404 (Not Found)

是资产在rails 4中的某种保留端点?

解决方法

这不仅仅是关于资产这个词.当路径路径和资产目录位于同一子目录中时,Rails不喜欢.

在发布帖子请求时,您将获得不允许的方法.问题是路径和资产目录不能重叠.问题特别在于该路径中的POST请求.我假设在rails中的某个地方,他们必须禁用资产目录的所有非GET请求.

在下面这个非常简单的应用程序中,您将获得一个方法不允许错误.因为路径/ welcome用于路由和资产前缀.

文件:config / environment / development.rb

config.assets.prefix = '/welcomes'

文件:config / routes.rb

resources :welcomes,path: 'welcomes',only: ['index','create']

文件:app / controllers / welcome_controller.rb

class WelcomesController < ApplicationController
  def index
    @welcome = 'hello';
  end

  def create
    @welcome = 'world';
  end
end

文件:app / views / welcome / index.html.rb

<%= form_for(@welcome) do |f| %>
    <%= f.submit 'Submit' %>
<% end %>

文件:app / views / welcome / create.html.rb

<h1>Welcomes#create</h1>
<p>Find me in app/views/welcomes/create.html.erb</p>

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: &lt;span id=&quot...
jQuery 添加水印 &lt;script src=&quot;../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...