Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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
Javascript Rails中的基本API_Javascript_Ruby On Rails_Json_Api_Url - Fatal编程技术网

Javascript Rails中的基本API

Javascript Rails中的基本API,javascript,ruby-on-rails,json,api,url,Javascript,Ruby On Rails,Json,Api,Url,假设我有一个Users控制器,带有returnjson操作。假设我想创建一个API,这样当客户端调用该方法时,它会将用户的数据返回给客户端。例如: JavaScript将使用该URL发出get请求,rails将以JSON格式返回用户信息。我该怎么做呢 提前谢谢 哦,我明白了,您只想返回参数中请求的属性。对不起 首先,我只想让我们看一下这方面的动作,而不是做一个新动作。从语义上讲,show的目的是返回单个记录的数据,因此这是该作业的正确操作 您的请求参数的结构不是很好-我会像 那会给你什么 p

假设我有一个
Users
控制器,带有
returnjson
操作。假设我想创建一个API,这样当客户端调用该方法时,它会将用户的数据返回给客户端。例如:

JavaScript将使用该URL发出get请求,rails将以JSON格式返回用户信息。我该怎么做呢


提前谢谢

哦,我明白了,您只想返回参数中请求的属性。对不起

首先,我只想让我们看一下这方面的
动作,而不是做一个新动作。从语义上讲,
show
的目的是返回单个记录的数据,因此这是该作业的正确操作

您的请求参数的结构不是很好-我会像

那会给你什么

params = {:required => ["username", "password"]}
我想这样做:

def show
  @user = User.find_by_id(params[:id])
  respond_to do |format|
    format.html #default to standard 'render the show template'
    format.js #default to standard 'render .js file'  or whatever
    format.json do 
      #filter out the ones we want
      if params[:required]
        hash = @user.attributes.slice(params[:required])
      else
        hash = @user.attributes
      end
      #this will automatically call `.to_json` on the thing we pass to it (`hash` in this case)
      render json: hash
    end
  end
end

您可以在这里添加额外的安全功能,例如限制通过api访问的字段。

Rails已经内置了所有用于此功能的机制。请参见中的“2.2.9呈现JSON”,但是对于链接
/returnjson?username=bob&password=p4ssw0rd
,我如何访问get请求传入的用户名和密码参数
params[:username]
应该等于
bob
p4ssw0rd
,出于明显的安全原因,不建议在GET请求中传递密码。改用POST;-)@Yoshiji先生感谢您的回复。最后一个问题。路线会是什么样子?我认为
resources:users
不足以获取参数,或者它会吗?不,
resources:users
将只提供基本的CRUD操作(创建、检索、更新、删除,分别是控制器的操作create、index、update、delete(和show操作))。在您的情况下,您需要一个将返回json的自定义操作。如果您想将其命名为
returnjson
(这在我看来不是很一致),您可以执行
post:returnjson,controller:'controller_name#action_name'
来创建到
/returnjson
的post路由