Ruby on rails 在没有关联模型的情况下使用演示者(Ryan Bates';风格)
我想使用presenters(如图所示:)来清理静态页面视图,但他的方法似乎依赖于一个底层模型,而静态页面没有这个模型。我可以在静态主页上使用此方法吗 我的用户设置(运行良好,并有相应的型号)如下所示:Ruby on rails 在没有关联模型的情况下使用演示者(Ryan Bates';风格),ruby-on-rails,ruby,railscasts,presenter,Ruby On Rails,Ruby,Railscasts,Presenter,我想使用presenters(如图所示:)来清理静态页面视图,但他的方法似乎依赖于一个底层模型,而静态页面没有这个模型。我可以在静态主页上使用此方法吗 我的用户设置(运行良好,并有相应的型号)如下所示: static_presenter.admin_all_notes 演示者: class UserPresenter < BasePresenter presents :user def h @template end def admin_text
static_presenter.admin_all_notes
演示者:
class UserPresenter < BasePresenter
presents :user
def h
@template
end
def admin_text
if user.admin?
'This is an admin'
else
'This is not an admin'
end
end
end
我想使用类似的结构来清理我的\u标题
部分,它在application.html.erb
中呈现,其中一部分如下所示:
static_presenter.admin_all_notes
from\u header.html.erb:
<% if current_user && current_user.admin? %>
<li><a href="#">All Notes</a></li>
<% end %>
要将必要的视图代码显示到home.html.erb
我不确定我是以最好的方式问这个问题的,但我的目标是使用Ryan Bates这样的演示者来清理我的静态页面视图,这些视图没有相应的模型
谢谢
编辑:
我特别困惑于如何包装静态页面(例如,
home.html.erb
)以及向块传递什么,接下来,如何从静态页面引用presenter类中的方法。您可以使用相同的方法。您只需要为演示者选择一个名称(例如static_presenter),而不会将模型实例传递给初始化,因为您正在演示静态或全局信息。否则,方法是相同的
因此,对于您当前的课程,我认为您可以:
class StaticPagesPresenter
def initialize(template)
@template = template
yield self if block_given?
end
def h
@template
end
def admin_notes
if h.current_user && h.current_user.admin?
'<li><a href="#">All Notes</a></li>'
end
end
end
class StaticPagesPresenter
def初始化(模板)
@模板=模板
如果给定块,则屈服于自身?
结束
def h
@模板
结束
def管理说明
如果h.current\u user&&h.current\u user.admin?
“”
结束
结束
结束
然后在标题部分中,您可以有如下内容:
<% StaticPagesPresenter.new(self) do |presenter| %>
<% presenter.admin_notes %>
<% end %>
我假设有Rails助手可以作为当前admin\u notes
中HTML的替代品,我不确定您是否需要h.
来引用当前用户