2014-08-29 26 views
1

我有一个android应用程序将数据导出到rails服务器。当我使用Rails 3时,一切都很好,很有用。但在轨道4的服务器接收,而不是内容的只有以下参数:Rails 4没有收到http发布内容,但在Rails 3中工作

{"action"=>"export", "controller"=>"trainings"} 

内容由以下发送:

HttpPost httpPost = new HttpPost(link); 
String xmlFile = createXml(locationList); 
StringEntity entity = new StringEntity(xmlFile, "UTF-8"); 
httpPost.setEntity(entity); 
httpPost.addHeader("Content-Type", "application/xml"); 
httpClient.execute(httpPost); 

并收到由滑轨用下面的代码:

begin 
    if !params[:training].nil? && !params[:training][:location].nil? && !params[:training][:datetime].nil? 
    locations = params[:training][:location] 

    if locations.count > 0 
     training = Training.create! created_at: Time.at((params[:training][:datetime].to_i/1000)) 

     locations.each do |xml_location| 
     if !xml_location["latitude"].nil? && !xml_location["longitude"].nil? 
      Location.create! latitude: xml_location["latitude"], longitude: xml_location["longitude"], training_id: training.id 
     end 
     end 
    end 
    end 
rescue TimeoutError => e 

end 

身体的一个例子是以下xml:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?> 
<training> 
    <datetime>1409332572032</datetime> 
    <location> 
    <longitude>-122.084095</longitude> 
    <latitude>37.422005</latitude> 
    </location> 
    <location> 
    <longitude>-122.084095</longitude> 
    <latitude>47.422005000000006</latitude> 
    </location> 
    <location> 
    <longitude>-132.08409333333333</longitude> 
    <latitude>47.422005000000006</latitude> 
    </location> 
    <location> 
    <longitude>-142.08409333333333</longitude> 
    <latitude>47.422005000000006</latitude> 
    </location> 
</training> 

尽管我搜索了Rails 3到4的变化,但我找不到任何可能导致此行为更改的内容。

回答

1

关于如何安全处理参数的主要差异之一是关于如何处理params的参数strong_parameters。你正试图直接访问params [:training],这在Rails4中是不允许的。这是可能的解决方案。

添加training_params功能在你的控制器(TrainingController?):

private: 
    def training_params 
    params.require(:training).permit(:location, :datetime) 
    end 

然后用training_params代替PARAMS。例如:training_params[:location]

另请参阅https://github.com/rails/strong_parameters了解更多关于strong_parameters的信息。

+0

试图以应用解决方案只是引发以下错误: 开始发表于2014年8月30日14时17分32秒+0200 处理“/导出”为127.0.0.1通过TrainingsController#导出为HTML 完成400 Bad Request in 0ms ActionController :: ParameterMissing(param丢失或者值为空:训练): app/controllers/trainings_controller.rb:57:in'training_params' app/controllers/trainings_controller.rb:21:in 'export' – flp 2014-08-30 12:18:39

+0

我可以看到POST数据的样子吗?看起来你没有发布“训练”参数? – mask8 2014-08-30 19:02:23

+0

我看起来像rails现在正在删除http post的数据,因为在Rails 3中它没有问题。帖子数据是:{“action”=>“导出”,“控制器”=>“培训”},我用training_params.inspect得到它,training_params是params.permit! – flp 2014-08-30 22:08:00