Donc, j'essaye de rendre un tableau d'objets dans mon fichier js.erb. Ma méthode de contrôleur qui fait ressembler le tableau ci-dessous:Rails 4.2 rendre un tableau dans js.erb provoque un plantage
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
Je sais que c'est un peu moche ce code. J'ai l'intention de le refactoriser. Donc, si la vue passe le params[:approved]
, je rejette certains objets de la collection. Si la vue n'a pas passé ce paramètre, la méthode reject
n'est pas appelée et @invoices
est ActiveRecord::Relation
. Comme vous pouvez le voir à la fin de cette méthode, je rends un fichier js.erb
. Dans ce fichier, j'ai ce code:
<% @invoices.each do |invoice| %>
var tableLine = $("<%= escape_javascript (render partial: 'invoice', locals: {invoice: invoice}, formats: :html) %>");
$("#report_invoice_table").append(tableLine);
<% end %>
Le code javascript exécute normalement lorsque @invoices
est un ActiveRecord::Relation
. Les problèmes surviennent si params[:approved]
n'est pas vide. La méthode reject
filtre les objets que je ne veux pas, mais renvoie @invoices
en tant que Array
. Quand il s'agit d'un Array
, le code javascript ne s'exécute tout simplement pas. Je n'ai même pas d'erreur.
Donc, conclusion: pourquoi quand je passe un ActiveRecord::Relation
au js.erb afin qu'il puisse être rendu, mon code javascript fonctionne normalement et n'a pas quand je passe un Array
?
J'ai beaucoup cherché et je n'ai pas trouvé la réponse. Désolé pour le mauvais anglais. N'hésitez pas à me corriger.
Merci d'avance.
Merci pour la réponse, mais n'a pas fonctionné. 'ActiveRecord :: Relation' et' Array' ne fonctionnent pas lorsque j'essaye de rendre un rendu en tant que collection. Et je ne reçois toujours aucun message d'erreur. –