在模型中编写Ruby方法,在视图中输出HTML

在模型中编写Ruby方法,在视图中输出HTML,html,ruby-on-rails,ruby,Html,Ruby On Rails,Ruby,我的视图中有一个方法,根据它所获得的对象的类来决定打印哪个HTML: <% def laybricks(c,stream) %> <% if c.is_a?(Post) %> <article> // Tons more HTML unique to posts </article> <% elsif c.is_a?(Photograph) %> <article> /

我的视图中有一个方法,根据它所获得的对象的类来决定打印哪个HTML:

<% def laybricks(c,stream) %>
  <% if c.is_a?(Post) %>
    <article>
      // Tons more HTML unique to posts
    </article>
  <% elsif c.is_a?(Photograph) %>
    <article>
      // Tons more HTML unique to photographs
    </article>
  <% end %>
<% end>

//更多专为帖子设计的HTML
//更多照片特有的HTML

但自从写了Rails之后,我现在对它了解得更多了。如何将其传输到模型中,以便在视图中调用该方法并使其以相同的方式打印HTML?

视图中的方法最好移动到帮助器中

但是为了满足您的需要,最好的解决方案是利用一些rails魔法的部分

<%= render @c %>

如果
@c
post
的实例,将神奇地呈现部分
\u post.html.erb
,如果是
photo
的实例,将神奇地呈现部分
\u photo.html.erb
。这些部分应位于同一视图文件夹中,您可以在每个部分中分别将对象引用为
post
photo

有关更多信息,请参阅


插件:

如何将其传输到模型中,以便在视图中调用该方法并让它打印HTML


生成HTML通常不是模型的责任,但如果您最终想要这样做,最好的方法是使用通常称为Presenter或Decorator的设计模式。例如,
draper
gem就是为了这个,但也有很多其他的。Rails社区中有很多关于如何调用这个模式、如何实现它以及它是否值得的讨论。

视图中的方法肯定最好移到帮助器中

但是为了满足您的需要,最好的解决方案是利用一些rails魔法的部分

<%= render @c %>

如果
@c
post
的实例,将神奇地呈现部分
\u post.html.erb
,如果是
photo
的实例,将神奇地呈现部分
\u photo.html.erb
。这些部分应位于同一视图文件夹中,您可以在每个部分中分别将对象引用为
post
photo

有关更多信息,请参阅


插件:

如何将其传输到模型中,以便在视图中调用该方法并让它打印HTML

生成HTML通常不是模型的责任,但如果您最终想要这样做,最好的方法是使用通常称为Presenter或Decorator的设计模式。例如,
draper
gem就是为了这个,但也有很多其他的。Rails社区中有很多关于如何调用此模式、如何实现它以及它是否值得的讨论。

更新:

应用程序助手

def laybricks(c,stream) 
    content = []
      if c.is_a?(Post) 
       content << "<article> </article>"
      elsif c.is_a?(Photograph) 
       content << "<article> </article>"
      end 
end
def铺砖(c,流)
内容=[]
如果c.是a?(职位)
内容更新:

应用程序助手

def laybricks(c,stream) 
    content = []
      if c.is_a?(Post) 
       content << "<article> </article>"
      elsif c.is_a?(Photograph) 
       content << "<article> </article>"
      end 
end
def铺砖(c,流)
内容=[]
如果c.是a?(职位)

内容这很可能属于帮助者而不是模型这很可能属于帮助者而不是模型1。您不能在helpers(但可以在partials)2中使用普通html/erb。来自
app/helpers
的所有帮助程序通常会自动加载到视图上下文中,因此无需在
@controller
中查看更新。您可以在helpers中使用
html/erb
,但这是您在解释视图中调用raw的方式。对于rails的最新版本,您的第二点是显而易见的。在较低版本中,您必须在控制器中明确声明。谢谢!Helper只是一个普通的Ruby模块,将
放入其中只是一个语法错误(是的,我测试了它:
/home/vk/quails/app/helpers/application\u helper.rb:35:语法错误,意外的“从好到好奇”。请参阅更新。您可以在qoutes中使用
,如上面的reply.Try所示。现在我知道了,您确实可以构造一个字符串。但您当前的示例将只返回
“”
因为每个rails方法只返回最后计算的值。1.帮助程序中不能包含普通html/erb(但可以包含在部分中)2.
app/helpers
中的所有helpers通常会自动加载到视图上下文中,因此无需在
@controller
中查看更新。helpers中可以包含
html/erb
,但这是您在视图中调用raw进行解释的方式。rails最新版本的第二点很明显。在较低版本中,您必须明确地在控制器中声明。谢谢!Helper只是一个普通的Ruby模块,将
放入其中只是一个语法错误(是的,我测试了它:
/home/vk/quails/app/helpers/application\u helper.rb:35:语法错误,意外的“从好到好奇”。请参阅更新。您可以在qoutes中使用
,如上面的reply.Try所示。现在我知道了,您确实可以构造一个字符串。但您当前的示例将只返回
“”
因为每个rails方法只返回最后计算的值。