Rails STI 和视图重用
Posted
技术标签:
【中文标题】Rails STI 和视图重用【英文标题】:Rails STI and views reuse 【发布时间】:2012-03-11 04:24:52 【问题描述】:我有一个 STI 模型,并希望为派生模型重用基本视图。 例如,如果我有 Teacher
有没有办法做到这一点?
【问题讨论】:
【参考方案1】:如果我理解您的问题...它们默认可用。使用 STI 时,每个派生模型都可以访问基类中的所有字段。 (表中的任何字段)
例如,在渲染局部时,您可以简单地像往常一样传递对象:
= render :partial => 'person', :object => @teacher
上面的代码可以通过多种方式完成,但我只是想说明一下。
【讨论】:
使用这种方法时有没有办法控制布局?执行此操作时,我会在每个项目的末尾获得编辑/删除链接,并且我没有机会添加派生字段(假设我不想将它们放在开头)? 当然。有几种不同的方法可以做到这一点。我不是视图逻辑的忠实拥护者,但你可以有一个 if 语句来检查它是什么人:“if person.kind_of?(Teacher)”【参考方案2】:如果您有教师和人员控制器,那么您可以从教师视图中的人员渲染视图(部分、模板)。
示例
您可以在教师视图中写下以下几行
= render :partial => 'persons/<PARTIAL NAME>'
= render :template => 'persons/<TEMPLATE>'
= render :file => 'persons/new'
【讨论】:
【参考方案3】:render
使用正确的部分,所以如果你有 _teacher.html.erb
和 _person.html.erb
部分,你可以 render
老师里面的人部分,当你用一个对象调用 render
时,正确的部分将是渲染:
# @aldo is a Person, this will render _person.html.erb
render @aldo
# @mr_brown si a Teacher, this will render _teacher.html.erb
render @mr_brown
因为在这种情况下,老师会部分呈现你所拥有的人的信息。
【讨论】:
使用这种方法时有没有办法控制布局?执行此操作时,我会在每个项目的末尾获得编辑/删除链接,并且我没有机会添加派生字段(假设我不想将它们放在开头)? 对不起,我不太明白你的意思,你有两个部分,在老师一个中渲染一个人,对吗?没有显示人员的字段吗?以上是关于Rails STI 和视图重用的主要内容,如果未能解决你的问题,请参考以下文章