假设我有一个叫做Thing的Rails模型。 Thing有一个url属性,可以select将其设置为Internet上的某个URL。 在查看代码,我需要逻辑,执行以下操作: <% if thing.url.blank? %> <%= link_to('Text', thing_path(thing)) %> <% else %> <%= link_to('Text', thing.url) %> <% end %> 这个视图中的条件逻辑是丑陋的。 当然,我可以build立一个辅助函数,将视图改为: <%= thing_link('Text', thing) %> 这解决了冗长的问题,但我真的更喜欢在模型本身的function。 在这种情况下,视图代码将是: <%= link_to('Text', thing.link) %> 显然,这将需要模型上的链接方法。 以下是它需要包含的内容: def link (self.url.blank?) ? thing_path(self) : self.url end 至于这个问题,thing_path()是Model代码中的一个未定义的方法。 我假设可以将一些辅助方法“拉进”模型,但是如何? 是否有一个真正的原因,路由只能在应用程序的控制器和视图层? 我可以想象很多模型代码可能需要处理URL(与外部系统集成等)的情况。