-1

我有SettingsController它允许我管理User的设置。

class Api::V1::SettingsController < Api::V1::BaseController  

  def show
    @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    @user.settings = JSON.parse(params[:settings])

    authorize! :edit, @user

    if @user.save
      render status: :ok
    else
      render status: :bad_request
    end
  end

end

和路线

resources :settings, only: [:show, :update]

Settings 是一个文本字段,其中包含:serialize :settings, HashWithIndifferentAccess

所以我用参数发送PUT请求http://mypage.com/api/vi/settings/:id.json"{\"settings\":{\"color\":\"red\"}}"

但我得到:

uninitialized constant Setting

{"_json"=>"{\"settings\":{\"color\":\"red\"}}",
 "id"=>"1",
 "format"=>"json",
 "setting"=>{"_json"=>"{\"settings\":{\"color\":\"red\"}}"}}

在这种情况下我应该如何设置路线?


我的路线:

app(development)» rake routes |grep settings
             api_v1_setting GET    /api/v1/settings/:id(.:format)         api/v1/settings#show
                            PATCH  /api/v1/settings/:id(.:format)         api/v1/settings#update                            PUT    /api/v1/settings/:id(.:format)         api/v1/settings#update

当我使用非资源路由时:

put 'settings/:id' => 'settings#update'

app(development)» rake routes |grep settings
api_v1 PUT    /api/v1/settings/:id(.:format)         api/v1/settings#update

我犯了同样的错误。

4

2 回答 2

-2

在这种情况下,您不能使用资源丰富,因为您没有设置模型。您需要使用非资源路由。

http://guides.rubyonrails.org/routing.html#non-resourceful-routes

于 2013-08-09T10:01:13.017 回答
-2

你可以运行 rake routes | grep 设置来检查您的路线。也许使用应该用这样的命名空间修改你的设置

scope :module => :api do
  constraints :subdomain => /(api|testapi|devapi)/ do
    namespace :v1 do
      resources :setting, :only => [:show, :update]
    end
  end
end
于 2013-08-09T09:58:34.940 回答