그래서 js.erb 파일에 객체 배열을 렌더링하려고합니다. 배열을 만드는 컨트롤러 메서드는 아래처럼 보입니다.Rails 4.2에서 js.erb의 배열 렌더링시 충돌이 발생합니다
def process_report
start_date = Date.parse(params[:start_date])
finish_date = Date.parse(params[:finish_date])
done = params[:done].to_i
kind = params[:kind].to_i
late = to_boolean params[:late]
@invoices = Invoice.where(due_date: start_date..finish_date,
done: done,
kind: kind,
late: late)
if params[:approved] != ""
@invoices = @invoices.reject{ |i| i.status.description != params[:approved] }
end
render 'complete_report.js.erb',
collection: @invoices, format: :js, status: :ok
end
이 코드는 약간 추한 것입니다. 나는 그것을 리펙토링하려고한다. 따라서 뷰가 params[:approved]
을 전달하면 컬렉션의 일부 객체를 거부합니다. 뷰가이 param를 건네주지 않은 경우는, reject
메서드는 불려 가지 않고, @invoices
는 ActiveRecord::Relation
입니다. 여러분이이 방법의 끝에서 볼 수 있듯이, 나는 js.erb
파일을 렌더링합니다. 이 파일의 내부에서,이 코드를 가지고 : @invoices
는 ActiveRecord::Relation
때
<% @invoices.each do |invoice| %>
var tableLine = $("<%= escape_javascript (render partial: 'invoice', locals: {invoice: invoice}, formats: :html) %>");
$("#report_invoice_table").append(tableLine);
<% end %>
자바 스크립트 코드는 정상적으로 실행됩니다. params[:approved]
이 비어 있으면 문제가 발생합니다. reject
메서드는 원하지 않는 개체를 필터링하지만 @invoices
은 Array
으로 반환합니다. Array
일 때 자바 스크립트 코드는 단순히 실행되지 않습니다. 나는 심지어 오류를 얻지 않는다.
그래서, 결론 : 그것은 렌더링 할 수 있도록 나는 js.erb에 ActiveRecord::Relation
를 통과 할 때, 내 자바 스크립트 코드가 정상적으로 작동하고 Array
를 I를 통과 할 때하지 않은 이유?
나는 수색을 많이하고 대답을 찾지 못했습니다. 나쁜 영어에 대해 유감스럽게 생각합니다. 저를 시정 해주십시오.
미리 감사드립니다.
답변 주셔서 감사합니다. 그러나 작동하지 않았습니다. 'ActiveRecord :: Relation'과'Array'는 콜렉션으로 렌더링하려고 할 때 작동하지 않습니다. 그리고 여전히 오류 메시지가 표시되지 않습니다. –