2016-11-19 2 views
0

먼저 나쁜 영어로 사과하고 싶습니다. URL이 브라우저에서 실제로 액세스 할 수있는 액션 인 경우 JQuery에서 "get"을 어떻게 사용합니까? 이것은 나의 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 이 작품! 내 DB에 저장된 이메일 주소를 읽을 수 있지만 url "localhost : 3000/user"는 전자 메일 목록을 표시하고 나는 그것을 원하지 않습니다! 브라우저에서 액세스 할 수없는 내 Ajax 요청에 대한 특정 컨트롤러를 만드는 방법은 무엇입니까? 누군가이 "domain.com/user"에 액세스하여 내 애플리케이션의 모든 이메일을받을 수 있기를 원하지 않습니다.

+0

당신은/사용 valdiation에서 로그의 모든 유형이 있습니까? –

+0

안녕하세요! 나는 Devise를 사용하고 있습니다. – ValeMarz

+0

devise에 대한 사용자 및 관리자 모델을 설정 했습니까? –

답변

1

여기서 두 가지 문제가 있습니다

먼저 JSON이이

$.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 

귀하의 아약스 호출에 의해 해결 될 수있는 HTML 요청 렌더링됩니다입니다

두 번째 문제는 액세스를 제한하는 것입니다. 이 동작은입니다. 이 목적으로 cancancan abilities을 사용할 수 있습니다.

+0

안녕하세요. 작동하지 않습니다.리소스를로드하지 못했습니다. 서버가 404 상태 (응답 없음)로 응답했습니다. – ValeMarz

+0

"localhost/user"에서 이메일을 볼 수없는 방법이 있는지 궁금합니다. 그렇지 않으면 모두 작동합니다. – ValeMarz

0

괜찮 았어. 이제 조치를 사용하여 Ajax 용 JSON 데이터를 얻고 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;});