20018


Rails4 の jbuilderでpostを実装したいです。  
iOSからpostを投げましたが、nillが帰ってきてしまいます。

api/v1/events/index.json.jbuilder

[code]

    json.events @events
    
[/code]

app/controllers/api/v1/events_controller.rb

[code]

    class Api::V1::EventsController < ApplicationController
      def index
        @events = Event.all
      end
    end
    
[/code]

app/controllers/events_controller.rb

[code]

    class EventsController < ApplicationController
    
      def new
        @event = Event.new
      end
    
      def create
        @event = Event.new(event_params)
        respond_to do |format|
          if @event.save
            format.json { render json: 'ok!', status: :created }
          else
            format.json { render json: 'Bad!', status: :unprocessable_entity }
          end
        end
      end
    
    
      def event_params
        params.require(:event).permit(:title, :start_time, :end_time)
      end
    end
    
[/code]

もしかすると、createアクションをapiのコントローラーにも書く必要があるのでしょうか。  
よろしくお願いいたします。


CC BY-SA 3.0
2015-12-15T08:23:43.853
20017
2015-12-16T15:20:42.340
2015-12-15T09:14:16.663
2646
13210
question
ruby-on-rails ruby api
iOSからpostを投げて、jbuilderでjsonを返したい


> もしかすると、createアクションをapiのコントローラーにも書く必要があるのでしょうか。

はい。そうです。

iOSからのpost先が`Api::V1::EventsController`でしたら`Api::V1::EventsController`に`EventsController`相当の`create`メソッドの実装が必要です。

また、routesをこのように定義している時

config/routes.rb

[code]

    namespace :api do
      namespace :v1 do
        resources :events, only: [:index, :create]
      end
    end
    
[/code]

このようなリクエストで登録処理ができると思います。

[code]

    curl -X POST -H "Content-Type: application/json" -d '{"event": {"title": "TITLE"}}' http://localhost:3000/api/v1/events
    
[/code]

また、`ApplicationController`の`protect_from_forgery`を`:null_session`にすることで登録できると思います。

app/controllers/application_controller.rb

[code]

    class ApplicationController < ActionController::Base
      protect_from_forgery with: :null_session
    end
    
[/code]


CC BY-SA 3.0
2015-12-15T08:38:25.650
20018
2015-12-16T15:20:42.340
2015-12-16T15:20:42.340
2646
2646
20017
answer