首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器通过API端点接收数据,但在创建记录(Rails)时忽略它。

服务器通过API端点接收数据,但在创建记录(Rails)时忽略它。
EN

Stack Overflow用户
提问于 2016-05-27 09:33:45
回答 1查看 39关注 0票数 1

我正在为create操作设置一个API端点,然后从另一个应用程序向它发布以创建db记录。

但是,当创建记录时,提交到端点的数据将被忽略。

在下面的代码中,Application 1使用rake任务发布到Application 2

应用程序1

代码语言:javascript
复制
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

模式

代码语言:javascript
复制
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

UsersController

代码语言:javascript
复制
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

路线

代码语言:javascript
复制
namespace :api do    
  namespace :v1 do
    resources :users, :defaults => { :format => 'xml' }  
  end
end

应用程序1中的响应请求

代码语言:javascript
复制
"<?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日志

代码语言:javascript
复制
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 ($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端点,因此任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-27 10:31:23

users_controller.rb中,在操作后添加:

代码语言:javascript
复制
private

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

并更新您的新操作以使用user_params而不是params[:user],如下所示:

代码语言:javascript
复制
@user = User.new(user_params)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37479936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档