2016-05-27 8 views
1

作成アクションのAPIエンドポイントを設定してから、別のアプリケーションから投稿してdbレコードを作成します。サーバーはAPIエンドポイント経由でデータを受信して​​いますが、レコード作成時に無視します(レール)

ただし、レコードの作成時にエンドポイントにポストされたデータは無視されます。

Application 1は、rakeタスクを使用してApplication 2に投稿しています。

アプリケーション1

task post_this: :environment do 
    require 'rest-client' 
    p RestClient.post "site.io/api/v1/users", {:first_name => "Long", :last_name => "John Silver", :email => "[email protected]"} 
end 

アプリケーション2

スキーマ

create_table "users", force: :cascade do |t| 
    t.string "first_name" 
    t.string "last_name" 
    t.string "email" 
    t.string "password" 
    t.string "password_confirmation" 
    t.string "temp_password" 
    t.datetime "created_at",   null: false 
    t.datetime "updated_at",   null: false 
end 

がUserController

def create 
    @user = User.new(params[:user]) 
    @user.temp_password = Devise.friendly_token 
    respond_to do |format| 
     if @user.save 
      format.json { render json: @user, status: :created } 
      format.xml { render xml: @user, status: :created } 
     else 
      format.json { render json: @user.errors, status: :unprocessable_entity } 
      format.xml { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
end 

ルート

namespace :api do  
    namespace :v1 do 
    resources :users, :defaults => { :format => 'xml' } 
    end 
end 

対応アプリケーションで1つの製作依頼

"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>\n <id type=\"integer\">6</id>\n <first-name nil=\"true\"/>\n <last-name nil=\"true\"/>\n <email nil=\"true\"/>\n <password nil=\"true\"/>\n <password-confirmation nil=\"true\"/>\n <temp-password>BzXXpW4wCM5ydhpYxzMg</temp-password>\n <created-at type=\"dateTime\">2016-05-27T09:14:32Z</created-at>\n <updated-at type=\"dateTime\">2016-05-27T09:14:32Z</updated-at>\n</user>\n" 

アプリケーション2つのHerokuのログ

Parameters: {"first_name"=>"Long", "last_name"=>"John Silver", "email"=>"[email protected]"} 
Started POST "/api/v1/users" for 104.155.210.3 at 2016-05-27 09:14:32 +0000 
(1.0ms) BEGIN2016-05-SQL (1.3ms) INSERT INTO "users" ("temp_password", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "id" [["temp_password", "BzXXpW4wCM5ydhpYxzMg"], ["created_at", "2016-05-27 09:14:32.759178"], ["updated_at", "2016-05-27 09:14:32.759178"]] 
Can't verify CSRF token authenticity 
(2.0ms) COMMIT 
Completed 201 Created in 43ms (Views: 16.1ms | ActiveRecord: 12.7ms) 

レコードが作成されているが、列のほとんどがありますなし。

私はちょうどAPIエンドポイントを設定する方法を学んでいますので、どんな助けでも大歓迎です!あなたのusers_controller.rb

+0

あなたはレールのどのバージョンを使用していますか? – DMH

+0

バージョン=> ruby​​ 2.3.0p0 –

+0

申し訳ありませんが、RubyではなくRuby on Railsバージョンです。 – DMH

答えて

1

あなたの行動を追加した後:

private 

def user_params 
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :temp_password) 
end 

、代わりにそのようなparams[:user]user_paramsを使用するように新しいアクションを更新します。

@user = User.new(user_params) 
関連する問題