首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails 4: ActiveRecords无法从JSON保存数据

Rails 4: ActiveRecords无法从JSON保存数据
EN

Stack Overflow用户
提问于 2016-04-15 23:13:24
回答 1查看 39关注 0票数 2

我试图从我在服务器上发送的JSON请求中保存数据。我已经在CSRF保护程序中添加了例外情况,并且它会传递请求。ActiveRecords 不从它中保存数据,但它用于HTML请求。

我使用curl来生成JSON请求

代码语言:javascript
运行
复制
curl  -v -X POST -d '{"claim": {"lastname":"Jhon Smith","phone":"+1(51)555555","latitude":"10.4","longitude":"12.7","theme":"Test message","text":"Text of test message"}}'  -H "Content-Type:application/json" -H "Accept:application/json" http://localhost:3000/claims/new

它返回消息代码200。

代码语言:javascript
运行
复制
> POST /claims/new HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.43.0
> Content-Type:application/json
> Accept:application/json
> Content-Length: 167
> 
* upload completely sent off: 167 out of 167 bytes
< HTTP/1.1 200 OK 
< X-Frame-Options: SAMEORIGIN
< X-Xss-Protection: 1; mode=block
< X-Content-Type-Options: nosniff
< Content-Type: application/json; charset=utf-8
< Cache-Control: no-cache

服务器回答说,它捕获了数据,但什么也没做。

代码语言:javascript
运行
复制
Started POST "/claims/new" for 127.0.0.1 at 2016-04-16 01:35:24 +0300
Processing by ClaimsController#new as JSON
  Parameters: {"claim"=>{"lastname"=>"Jhon Smith", "phone"=>"+1(51)555555", "latitude"=>"10.4", "longitude"=>"12.7", "theme"=>"Test message", "text"=>"Text of test message"}}
  Rendered claims/new.json.erb (0.0ms)
Completed 200 OK in 2ms (Views: 1.2ms | ActiveRecord: 0.0ms)

我的控制器有代码试图保存JSON

代码语言:javascript
运行
复制
def create
  @claim = Claim.new(claim_params)

  respond_to do |format|
    if @claim.save
      format.html do
        redirect_to acceptedclaim_path
        flash[:success] = "Ваша заява прийнята! Дякуємо за допомогу!"
      end
      format.json do
        render json: @claim, status: :created, location: @claim
      end
    else
      format.html do
        redirect_to new_claim_path
        flash[:danger] = flash_errors(@claim)
      end
      format.json do
        render json: @claim.errors, status: :unprocessable_entity
      end
    end
  end
end

def claim_params
  params.require(:claim).permit(:lastname, :phone, :latitude, :longitude, :theme, :text)
end

我通过路由器中的下一个配置访问POST

代码语言:javascript
运行
复制
post   'claims/new' => 'claims#new'

我将非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-15 23:47:11

POST /claims/new正在您的控制器中命中new操作,但是在您的示例中您定义了create操作。

若要修复此问题,请将其添加到您的路线中,如果它尚未出现:

post 'claims' => 'claims#create'

并以相同的参数针对POST /claims动作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36658268

复制
相关文章

相似问题

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