如何设置路由到更新指定模型的控制器?

时间:2013-08-09 09:50:26

标签: ruby-on-rails ruby json routing

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]

设置是一个文本字段: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

我得到了同样的错误。

2 个答案:

答案 0 :(得分:-2)

你可以运行佣金路线| grep设置检查您的路线。 也许使用应修改您的设置rotues与一些名称空间,如

scope :module => :api do
  constraints :subdomain => /(api|testapi|devapi)/ do
    namespace :v1 do
      resources :setting, :only => [:show, :update]
    end
  end
end

答案 1 :(得分:-2)

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

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