2017-02-28 84 views
0

通常,当我做一个POST或Web应用程序获取HTTP调用,哈希,请直接从params哈希表:参数无法通过PARAMS哈希

@user = User.find(params[:id]) 

不过,我已经派内容类型“应用/ JSON”从Android应用,像这样:

JSONObject holder = new JSONObject(); 
JSONObject userObj = new JSONObject(); 
userObj.put("username", params.get("name")); 
userObj.put("uid", params.get("uid")); 
userObj.put("image", params.get("image")); 
userObj.put("provider", params.get("provider")); 
holder.put("user", userObj); 
query = holder.toString(); 


url = new URL("http://10.0.2.2:3001/users/auth/facebook/callback.json "); 
urlConnection = (HttpURLConnection) url.openConnection(); 
urlConnection.setReadTimeout(10000); 
urlConnection.setConnectTimeout(15000); 
urlConnection.setRequestMethod("POST"); 
urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
urlConnection.setDoInput(true); 
urlConnection.setDoOutput(true); 
OutputStream os = urlConnection.getOutputStream(); 
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
writer.write(query); 

当我看着日志,是很好的被格式化的数据:

Processing by OmniauthCallbacksController#facebook as JSON 
Parameters: {"user"=>{"username"=>"John Dough", "uid"=>"11111222444", ... 

但是,我无法访问params哈希表像这样:

params_user # => nil 

def params_user 
    params[:user].permit! 
end 

为什么我不能访问params哈希表时,它显然是可用?

如果我尝试访问它是这样的:

params.parameters['user'] 

它告诉我则params的参数的方法是受保护的。但这是我使用调试器时唯一看到数据的地方。

NoMethodError (protected method `parameters' called for #<ActionController::Parameters:0x007fc51d1f9e08>): 
+0

是它阻止,因为强大的参数? – emaillenin

+0

@emaillenin没有看到我的代码:params [:user] .permit!我允许强参数 – Donato

回答

2

不知道你正在使用的Rails的版本,但在现代的Rails你这样做:

def params_user 
    params.require(:user).permit(:email, :name, :other_attributes) 
end 
+0

这可能是问题的一部分。显然,request.user_agent包含Android的“Dalvik”而不是“Mobile”。 – Donato