我在名为analysis_result.rb
的模型中对此进行了定义:
def total_matches
self.patterns.sum do |_, v|
mat = v.mat.try(:count) || 0
if v.additional.present? && v.additional['ggroup'].present?
g_mat = v.additional['ggroup'].try(:count) || 0
else
g_mat = 0
end
matches + g_matches
end
end
我试图在名为_rable_row.haml
的视图中使用它,以便事先检查total_matches
是否为0。如果为0,我想显示部分内容而不是让用户转到链接。
这是从视图中检查if analysis.results.total_matches != 0
的代码:
%tr.form-table__row{ class: ('form-table__row--disabled' if analysis.processing?) }
%td.form-table__data= check_box_tag "checkbox_object_ids[]", analysis.id
%td.form-table__data
- if analysis.results.total_matches == 0
= render partial: 'partials/shared/empty'
- elsif analysis.results.total_matches != 0
= link_to analysis.title, analysis, class: 'js-toggle', data: { href: "loading-#{analysis.id}" }
- unless analysis.viewed
%span.dashboard__icon.dashboard__icon--small.fa.fa-circle.text-info{ aria: { hidden: 'true' }, title: 'New' }
我得到undefined method 'total_matches' for #
您的问题来自方法本身的定义。您已经在total_matches
上声明了方法analysis_result.rb
,但是正在调用analysis.results.total_matches
。我会写analysis.total_matches
。
奖金:
我会建议在您的方法total_matches
上方加一个保护子句>
def total_matches
return 0 unless self.patterns
# ...
end