Commit bb150fb82c7be2e5b6952b38e7a1b40c432c5859
1 parent
2b56f641
Exists in
staging
and in
31 other branches
Fix render partial for class to work with searches
Showing
1 changed file
with
40 additions
and
5 deletions
Show diff stats
app/helpers/partials_helper.rb
... | ... | @@ -29,14 +29,49 @@ module PartialsHelper |
29 | 29 | raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' |
30 | 30 | end |
31 | 31 | |
32 | - def render_partial_for_class klass, *args | |
32 | + | |
33 | + def partial_for_class(klass, prefix=nil, suffix=nil) | |
33 | 34 | raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' if klass.nil? |
35 | + name = klass.name.underscore | |
36 | + controller.view_paths.each do |view_path| | |
37 | + partial = partial_for_class_in_view_path(klass, view_path, prefix, suffix) | |
38 | + return partial if partial | |
39 | + end | |
40 | + | |
41 | + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' | |
42 | + end | |
43 | + | |
44 | + ## | |
45 | + # Calculate partial name with prefix and suffix | |
46 | + # Togheter with render_partial_for_class, | |
47 | + # it should replace #partial_for_class_in_view_path in the future | |
48 | + # | |
49 | + def partial_name_for underscore, prefix = nil, suffix = nil | |
50 | + parts = underscore.split '/' | |
51 | + if prefix or suffix | |
52 | + partial = [prefix, parts.last, suffix].compact.map(&:to_s).join '_' | |
53 | + else | |
54 | + partial = parts.last | |
55 | + end | |
56 | + if parts.size > 1 | |
57 | + "#{params[:controller]}/#{parts.first}/#{partial}" | |
58 | + else | |
59 | + partial | |
60 | + end | |
61 | + end | |
62 | + | |
63 | + def render_for_class klass, *args, &block | |
64 | + raise ArgumentError, 'No partial for object. Is there a partial for any class in the inheritance hierarchy?' unless klass | |
34 | 65 | begin |
35 | - partial = klass.name.underscore | |
36 | - partial = "#{params[:controller]}/#{partial}" if params[:controller] and partial.index '/' | |
37 | - return render partial, *args | |
66 | + capture klass, &block | |
38 | 67 | rescue ActionView::MissingTemplate |
39 | - return render_partial_for_class klass.superclass, *args | |
68 | + render_for_class klass.superclass, *args, &block | |
69 | + end | |
70 | + end | |
71 | + | |
72 | + def render_partial_for_class klass, *args | |
73 | + render_for_class klass do |klass| | |
74 | + render partial_name_for(klass.name.underscore), *args | |
40 | 75 | end |
41 | 76 | end |
42 | 77 | ... | ... |