Je veux récupérer les messages en fonction de leur statut, donc j'ai ce code dans mon action PostsController
index
. Il semble que l'action de l'index soit encombrée, et je ne suis pas sûr que cela appartienne ici.Comment refactoriser ce code Ruby on Rails?
Comment pourrais-je le rendre plus concis et où devrais-je le déplacer dans mon application afin qu'il n'encombre pas mon action d'index (si c'est la bonne chose à faire)?
if params[:status].empty?
status = 'active'
else
status = ['active', 'deleted', 'commented'].include?(params[:status]) ? params[:status] : 'active'
end
case status
when 'active'
#active posts are not marked as deleted and have no comments
is_deleted = false
comments_count_sign = "="
when 'deleted'
#deleted posts are marked as deleted and have no comments
is_deleted = true
comments_count_sign = "="
when 'commented'
#commented posts are not marked as deleted and do have comments
is_deleted = false
comments_count_sign = ">"
end
@posts = Post.find(:all, :conditions => ["is_deleted = ? and comments_count_sign #{comments_count_sign} 0", is_deleted])
+1 c'est ce que j'allais suggérer aussi –
merci! Je pense que vous vouliez dire 'def find_all_based_on_status status' pas' def file_bas_based_on_status status'. Mémoire musculaire au travail. De même, existe-t-il un moyen de rendre le code de recherche lui-même plus concis? –
Faites que votre méthode finder utilise des étendues nommées comme la réponse de @ zed_0xff –