Ruby on rails 演示者中的模板路径问题(ActionView::Template::Error(缺少部分…)
我将render_listable helper移动到演示器中,现在我的渲染路径错误,因为渲染方法无法看到模板 如何修复模板路径的路径? 错误 ActionView::Template::Error(缺少部分搜索/\u列表\u带有 {:locale=>[:en],:formats=>[:html,:text,:js,:css,:ics,:csv,:vcf, :vtt,:png,:jpeg,:gif,:bmp,:tiff,:svg,:mpeg,:mp3,:ogg,:m4a, :webm,:mp4,:otf,:ttf,:woff,:woff2,:xml,:rss,:atom,:yaml, :multipart_form,:url_encoded_form,:json,:pdf,:zip,:gzip], :variants=>[],:handlers=>[:raw,:erb,:html,:builder,:ruby, :coffee,:jbuilder]}。在中搜索:): 应用程序演示者 注: 我注意到,如果我在中传递viewcontext,而不是使用ActionController::Base.helpers方法(h方法),它就会工作 但是,我更希望不必在上下文中传递视图。 所以当我从视野中呼叫Ruby on rails 演示者中的模板路径问题(ActionView::Template::Error(缺少部分…),ruby-on-rails,ruby,ruby-on-rails-5,ruby-on-rails-5.2,presenter,Ruby On Rails,Ruby,Ruby On Rails 5,Ruby On Rails 5.2,Presenter,我将render_listable helper移动到演示器中,现在我的渲染路径错误,因为渲染方法无法看到模板 如何修复模板路径的路径? 错误 ActionView::Template::Error(缺少部分搜索/\u列表\u带有 {:locale=>[:en],:formats=>[:html,:text,:js,:css,:ics,:csv,:vcf, :vtt,:png,:jpeg,:gif,:bmp,:tiff,:svg,:mpeg,:mp3,:ogg,:m4a, :webm,:mp4,
listing.listable\u type(self)
但是我想要
listing.listable\u type
正确的路径是什么?在您的错误中,在中搜索后会出现什么:
?@jvillian已更新。感谢这些奇怪的方法,如“h”或“routes”这是一个糟糕设计理念的标志。也许你只需要一个助手方法,而不是演示者类。我需要更好地组织我的助手,所以我将他们转移给演示者。为什么他们的设计不好?
> 3: <div class="col-md-12 vertical-right">
> 4: <% if listings && listings.size > 0 %>
> 5: <% listings.each do |listing_object| %>
> 6: <%= listing_object.render_listable %>
> 7: <hr/>
> 8: <% end %>
> 9:
>
class ListingPresenter < ApplicationPresenter
def render_listable
case listable_type
when "Car"
h.render partial: "search/listing_car", locals: { listing: self }
when "Truck"
h.render partial: "search/listing_truck", locals: { listing: self }
else
"NO TEMPLATE RENDERED"
end
end
end
class ApplicationPresenter
delegate_missing_to :@object
def initialize(object)
@object = object
end
def h
ActionController::Base.helpers
end
def routes
Rails.application.routes.url_helpers
end
def self.present(obj, presenter_class = nil)
klass = presenter_class || presenter_name(obj).constantize
klass.new obj
end
def self.wrap_collection(collection)
collection.map { |obj| self.present(obj) }
end
private
def self.presenter_name(model)
if model.class == Listing
"#{model.listable_type}Presenter"
else
"#{model.class}Presenter"
end
end
end
def render_listable(view_context)
case listable_type
when "Car"
view_context.render partial: "search/listing_car", locals: { listing: self }
when "Truck"
view_context.render partial: "search/listing_truck", locals: { listing: self }
else
"NO TEMPLATE RENDERED"
end
end