Rails 3 – 限制资源路由中的操作格式
我有我的路线中定义的资源。
resources :categories
我在我的类别控制器中有以下内容:
def show @category = Category.find(params[:id]) respond_to do |format| format.json { render :json => @category } format.xml { render :xml => @category } end end
控制器操作对于json和xml工作正常。 不过,我不希望控制器响应html格式的请求。 我怎样才能只允许JSON和XML? 这应该只在演出中发生。
达到这个目标的最好方法是什么? 还有什么好的提示干起来的respond_to块?
谢谢你的帮助。
我发现这似乎工作(感谢@潘指着我在正确的方向):
resources :categories, :except => [:show] resources :categories, :only => [:show], :defaults => { :format => 'json' }
以上似乎强制路由器服务一个无格式的请求,显示操作,作为默认的JSON。
如果你想限制它们到一个特定的格式(例如html或json),你必须把这些路由包装在一个范围内。 不幸的是,在这种情况下,限制条件并不像预期那样工作。
这是这样一个块的例子…
scope :format => true, :constraints => { :format => 'json' } do get '/bar' => "bar#index_with_json" end
更多信息可以在这里find: https : //github.com/rails/rails/issues/5548
这个答案是从我以前的答案复制。
Rails路由 – 限制资源的可用格式
您可以在routes.rb文件中执行以下操作,以确保只有show操作被约束为json或xml:
resources :categories, :except => [:show] resources :categories, :only => [:show], :constraints => {:format => /(json|xml)/}
如果这不起作用,你可以尝试显式匹配的行动:
resources :categories, :except => [:show] match 'categories/:id.:format' => 'categories#show', :constraints => {:format => /(json|xml)/}
constraints
不起作用的POST请求,然后我试着defaults
它适用于所有。
namespace :api, :defaults => { :format => 'json' } do namespace :v1 do resources :users do collection do get 'profile' end end post 'signup' => 'users#create' post 'login' => 'user_sessions#create' end end
我正在使用Rails 4.2.7