服务器正在通过 API 端点接收数据,但在创建记录时忽略它 (Rails)
Server is receiving data via API endpoint but ignoring it when creating a record (Rails)
我正在为创建操作设置一个 API 端点,然后 post 从另一个应用程序访问它以创建数据库记录。
但是在创建记录时,post发送到端点的数据被忽略了。
在下面的代码中,Application 1
使用 rake 任务 post 到 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 => "1@example.com"}
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
用户控制器
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"=>"1@example.com"}
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 (, , ) 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
操作后添加:
private
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :temp_password)
end
并更新您的新操作以使用 user_params
而不是 params[:user]
,如下所示:
@user = User.new(user_params)
我正在为创建操作设置一个 API 端点,然后 post 从另一个应用程序访问它以创建数据库记录。
但是在创建记录时,post发送到端点的数据被忽略了。
在下面的代码中,Application 1
使用 rake 任务 post 到 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 => "1@example.com"}
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
用户控制器
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"=>"1@example.com"}
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 (, , ) 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
操作后添加:
private
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :temp_password)
end
并更新您的新操作以使用 user_params
而不是 params[:user]
,如下所示:
@user = User.new(user_params)