2016-11-19 10 views
0

まずは悪い英語をお詫びしたい。 URLが実際にブラウザからアクセスできるアクションである場合、JQueryで「取得」を使用するにはどうすればよいですか?これは私の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

あなたはdeviseのユーザーモデルと管理モデルを設定しましたか? –

答えて

1

あなたがここに二つの問題があります:最初には、JSONをHTML要求 のためにレンダリングされる

これはあなたのAJAX呼び出しがこの

$.get('/users.json').success(function(data) { availableTags = data;}); 
のようになります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 

によって解決することができます

2番目の問題はアクセス権の制限ですoこのアクション。この目的のためにcancancan abilitiesを使用することができます。

+0

こんにちは!動いていない。 リソースの読み込みに失敗しました:サーバが404のステータス(Not Found)で応答しました – ValeMarz

+0

"localhost/user"で電子メールを表示しない方法があるのでしょうか?それ以外の場合はすべて動作します。 – ValeMarz

0

私は解決しました。今、私はJSONデータをAjax用に取得し、user/indexからリダイレクトするアクションを使用できます。 同様の質問: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;}); 
関連する問題