2016-11-19 69 views
0

首先,我想为我的坏英语道歉。 如何使用JQuery中的“get”,如果url实际上是一个可从浏览器访问的操作?这是我的js文件:关于Ruby on Rails的Ajax和Json:不确定动作url

$.get('/user').success(function(data) { availableTags = data;}); 

这是我的控制器:

class UserController < ApplicationController 
def index 
    @email = User.all.collect(&:email) 
    render json: @email 
end 

我的想法是:filejs(阿贾克斯)------->控制器(行动)------> filejs 这工程!我可以读取存储在我的数据库中的电子邮件地址,但URL“localhost:3000/user”显示电子邮件列表,我不想要它! 那么怎么可能为我的ajax请求创建一个无法从浏览器访问的特定控制器? 我不希望有人可以通过访问此“domain.com/user”来获取我的应用程序的所有电子邮件。

+0

你有在/使用valdiation任何类型的日志? –

+0

嗨!我正在使用Devise。 – ValeMarz

+0

您是否为设计设置了用户和管理模型? –

回答

1

您这里有两个问题:

首先是JSON被渲染为HTML请求 这可以通过respond_to

class UserController < ApplicationController 
    def index 
     @email = User.all.collect(&:email) 
     respond_to do |format| 
     format.json { render json: @email.to_json } 
     end 
    end 
end 

你的Ajax调用来解决会是这样

$.get('/users.json').success(function(data) { availableTags = data;}); 

你的第二个问题是限制访问t o此行动。为此,您可以使用cancancan abilities

+0

嗨!它不工作。我在chrome js-console中得到了这个: 加载资源失败:服务器响应状态为404(未找到) – ValeMarz

+0

我想知道是否有方法不在“localhost/user”中查看电子邮件,因为否则它一切正常。 – ValeMarz

0

好的我解决了,现在我可以使用该操作来获取Ajax的JSON数据并从用户/索引重定向。 类似的问题:Preventing direct url access to rails controller methods

我的控制器:

class UserController < ApplicationController 
    def index 
     if request.xhr? 
     # respond to Ajax request 
     @email = User.all.collect(&:email) 
     respond_to do |format| 
      format.json { render :json => @email } 
        end 
     else 
     # respond to normal request 
     redirect_to tasks_path #the root 
     end 

    end 
end 

我的JS:

$.get('/user').success(function(data) { availableTags = data;});