1

Rails 3.0.7 を使用して、アプリ用の API を作成しています。次のように設定しています。

ルート.rb

  namespace :api do
    namespace :v1 do
      match "connect" => "users#login", :via => :post
      match "disconnect" => "users#logout", :via => :post
      resources :users
      match "users/:id/foos" => "foos#list", :via => :get
      match "users/:id" => "users#update", :via => :put
      match "foos/:id/bars" => "bars#list_by_foo", :via => :get
      match "foos/:id" => "foos#show", :via => :get, :constraints => { :id => /\d+/ }
      match "bars/:id" => "bars#show", :via => :get
    end
  end

  # other routes here e.g.
  match "users/find" => "users#find_by_name", :via => :get
  match "users" => "users#create", :via => :post

そして、通常のapp/controllers/application_controller.rbandファイルと、次のように定義さapp/controllers/users_controller.rbれた my app/controllers/api/v1/application_controller.rbandファイルがあります。app/controllers/api/v1/users_controller.rb

class Api::V1::ApplicationController < ApplicationController
  before_filter :verify_access

  def verify_access
    # some code here
  end
end

class Api::V1::UsersController < Api::V1::ApplicationController
  skip_before_filter, :except => [:show, :update, :delete]
end

以前は、UsersController と Api::V1::UsersController の両方で共有されているメソッドをオーバーライドするまで、すべてが正しく機能しているように見えましたが、api/v1 を介してアクセスしているにもかかわらず、すべてが UsersController を指しているように見えます。 /users ルート。

私はそれを理解しようとして頭がいっぱいです。助言がありますか?ありがとう。PS - 私が無視すべきではない慣習や、私が台無しにした可能性のあるその他のことについて、遠慮なくコメントしてください:)

4

2 に答える 2

0

skip_before_filterまた、一般的には、スキップしたい前のフィルターのシンボルパラメーターを取ります。適切なスコープ/名前空間が適用されている限り、コントローラー名は一意である必要はありません。

  • API/users_controller
  • 管理者/users_controller
  • ユーザーコントローラー

次に、コントローラーごとのコード

class Api::V1::UsersController < Api::V1::BaseController
end

class Admin:UsersController < Admin::BaseController
end

class UsersController < ApplicationController
end

次に、ルート

MyApp::Application.routes.draw do

scope :module => "api" do
  namespace :v1 do
    resources :users
  end
end

namespace :admin do
  resources :users
end

  resources :users
end
于 2012-08-08T00:14:08.290 に答える