2014-12-02 1 views
1

사용자는 링크를 통해 보고서를 다운로드 할 수 있으며 링크 옆에는 파일을 이미 다운로드했는지 여부를 나타내는 텍스트 플래그가 있습니다 '경고. Ajax는 send_data를 호출하고 하나의 작업으로 부분 렌더링 메소드 두 개를 렌더링합니다.

def show 
    set_chapter_report 
    set_read_status_true(@chapter_report) 
    send_data @chapter_report.chapter_report.read, filename: @chapter_report.chapter_report_original_filename 
    respond_to do |format| 
    format.js 
    end 
end 

그리고 show.js에서

가, 호출이 하나를 다시 렌더링 - chapter_reports_controller.rb에서
<p id="chapter_report_index_item"> 
<%= link_to "#{report.chapter_report_original_filename}", chapter_report_path(report), remote: true %> 
<%unless check_read_status?(report) %>Unread 
<%end%> 
<p> 

는 내가 가진

: I 보고서의 인덱스에서 단일 항목을 표시하는 부분을 HAVA 일부 항목은 - 부분이 표시 될 때 기본적 아이디어는, 읽지 않은 플래그는 사용자가 클릭하지 않은 경우 표시됩니다 -

$("#chapter_report_index_item").html("<%= j (render(partial: 'index_item', locals: {report: @chapter_report})) %>"); 

당신은보기에서 check_read_status 방법을 알게 될 것이다 다운로드 링크에.

내 문제는 동작에서 렌더링과 부분적인 두 가지를 렌더링하려고합니다. 이것을 피하는 방법은 무엇입니까?

기본적으로 파일을 다운로드하면 변경되는 다운로드 버튼이 필요합니다.

내가 (아래 코멘트를 당) 도우미에 자바 스크립트 불구하고이 문제를 해결하기 위해 노력하고있어

업데이트. 내 문제는 send_file이며 동류가 기본적으로 난 그냥 다운로드 방법에 대한 호출이 포함 된 부분에 jQuery를 호출있어 application_helper.rb

의 방법으로 사용할 수 없습니다입니다 -

<%= report.class.name %> 
<%= report.chapter_report_original_filename %> 
<%= asset_download(report) %> 

에서을 도우미 -

def asset_download(object) 
    object.chapter_report_original_filename 
    #send_file(object.chapter_report.read, filename:object.chapter_report_original_filename) 
end 

나는 무엇이 통과하는지보기 위해 .class.name 등에 전화를 걸었다. ActionController하지 ActionView 사용할 수

ActionView::Template::Error (undefined method `send_file' for #<#<Class:0x0... 

나는 방법 왜냐하면 추측하고있어입니다 - 나는 send_file 전화의 주석을 때, 나는 오류가 발생합니다.

그래서 질문은 -이 컨텍스트에서 컨트롤러 메서드를 어떻게 사용할 수 있습니까? 아니면 다른 방법을 찾아야합니까?

아래의 답변에 따라을 호출하면 javascript를 통해 호출이 포함 된 부분을 렌더링하여 send_file 메소드를 호출 할 수 있습니다. 방법은 this question에 따라 도우미에서 사용할 수 있도록해야합니다.

답변

0

두 가지 별도의 동작 (다운로드 및 ajax 호출)에서 작업을 분할하고 다운로드 클릭을 수신 대기하는 프론트 엔드 (javascript) 코드를 작성하고 update_read_status 동작에 대한 두 번째 ajax 호출을 트리거 할 수 있습니다 (예 : jquery).

+0

안녕하세요 - 감사합니다. js.erb 파일에서 작업을 시도하고 트리거하는 것은 나에게 발생했지만 응용 프로그램 도우미에서 메서드를 호출하려고하면 '인식 할 수없는 메서드'오류가 발생합니다. 이걸 어떻게 끝내는 지 알아? – RADan

+0

'인식 할 수없는 방법'오류가 발생하면 정확히 무엇을하려합니까? –

+0

js 파일에서 erb의 메서드를 호출하려고했습니다. <% j download_item (@object) %>와 같은 것입니다. 여기서 download_item은 응용 프로그램 도우미의 메서드입니다. 지금은 약간 다른 방식으로 시도하고 있습니다. 질문을 업데이트 할 것입니다. – RADan

관련 문제