Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails传递不同于id的参数以返回JSON用户对象的正确路径是什么?提供的控制器方法_Ruby On Rails_Ruby_Json_Routes - Fatal编程技术网

Ruby on rails Rails传递不同于id的参数以返回JSON用户对象的正确路径是什么?提供的控制器方法

Ruby on rails Rails传递不同于id的参数以返回JSON用户对象的正确路径是什么?提供的控制器方法,ruby-on-rails,ruby,json,routes,Ruby On Rails,Ruby,Json,Routes,编辑:这是Rails 4 users\u controller.rb文件中的Rails代码 def showobjectdata @users = User.all @user = User.find_by(:username => params[:username]) render :json => @user end 我已经尝试了很多路由,但是(在这个URL的开头添加“localhost”部分)/users/showobjectdata/existinguser

编辑:这是Rails 4

users\u controller.rb文件中的Rails代码

def showobjectdata
  @users = User.all
  @user = User.find_by(:username => params[:username])
  render :json => @user
  end
我已经尝试了很多路由,但是(在这个URL的开头添加“localhost”部分)/users/showobjectdata/existingusername在我的浏览器中 返回null

请注意:我能够呈现关于所有用户或特定用户的JSON数据,如果我以其他方式查找用户,而不是在浏览器的URL字段中传递非id的参数。就像控制器方法一样,我可以通过特定的电子邮件地址专门查找用户。users/show/:id呈现该id的JSON用户数据,因为我已经定义了show controller方法来呈现JSON用户数据(目前)

下面是我在routes.rb文件中尝试的路线示例: 通过以下方式将“用户/showobjectdata/:用户名”匹配到:“用户”#showobjectdata:[:获取,:发布]

我尝试了各种组合,包括普通GET、普通POST、嵌套括号等。除了普通POST不起作用之外,我总是得到null。

试试这个

match 'users/showobjectdata/:username', to: 'users#showobjectdata', via: [:get, :post], param: 'username'

这是正确的答案

基本上,我的用户名参数(firstname.lastname)没有作为完整字符串传递。它被作为firstname而不是firstname.lastname传递,Rails应用程序认为“.”是格式参数的起始位置(“lastname”被认为是传入参数中的格式输入)。具有讽刺意味的是,我看到这些传入的参数出现在我的浏览器中,只是在我尝试新的东西时出现了另一个错误(基本上,我的应用程序没有响应“showobjectdata”方法中的“respond_to | format |”,当我随机尝试时——这当然会导致这些参数显示在屏幕底部并用谷歌搜索解决方案。是的,在了解了这些参数后,我跳过了respond_to,再次只是渲染与之前一样,直接将json用户对象标记为红色,而不区分HTML和json格式)

因此,基本上这是一条对我有效的正确路线:

    match 'users/showobjectdata/:username', to: 'users#showobjectdata', via: [:get, :post], :constraints => { :username => /[^\/]+/ }
最初发布的控制器方法很好

“:constraints=>”部分的来源:

它对我不起作用。我仍然得到null。你认为有什么原因我不能像那样将用户名传递到URL吗?可能是因为我的创建方法使用params.permit并在那里包含用户名?去看看它在没有params.permit函数的情况下是如何工作的。使用rake routes检查生成的路由我看到get | POST/users/showobjectdata/:username(:format)for users#showobjectdata。所有路由都在rake routes命令上正确显示。此外,使用params.permit部分注释users/create方法也没有什么区别。您是否在控制器中添加了强params配置所允许的
:username
键?(如果是Rails 4)在控制器的哪个方法中,你是说在showobjectdata方法中?我在users/create方法中只有params.permit作为标准,并在用户模型文件中进行验证。我如何执行你所说的?我试图通过私有参数方法间接提及“showobjectdata”方法中的用户名参数。它对m不起作用E