相关疑难解决方法(0)

可以在模型中使用Rails路由助手(即mymodel_path(模型))吗?

假设我有一个名为Thing的Rails模型.Thing有一个url属性,可以选择将其设置为Internet上的某个URL.在视图代码中,我需要执行以下操作的逻辑:

<% if thing.url.blank? %>
<%= link_to('Text', thing_path(thing)) %>
<% else %>
<%= link_to('Text', thing.url) %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

视图中的这种条件逻辑很难看.当然,我可以构建一个辅助函数,它会将视图更改为:

<%= thing_link('Text', thing) %>
Run Code Online (Sandbox Code Playgroud)

这解决了冗长问题,但我真的更喜欢模型本身的功能.在这种情况下,视图代码将是:

<%= link_to('Text', thing.link) %>
Run Code Online (Sandbox Code Playgroud)

显然,这需要模型上的链接方法.这是它需要包含的内容:

def link
  (self.url.blank?) ? thing_path(self) : self.url
end
Run Code Online (Sandbox Code Playgroud)

就问题而言,thing_path()是Model代码中未定义的方法.我假设可以将一些辅助方法"拉入"模型中,但是如何?是否有一个真正的原因,路由只在控制器上运行并查看应用程序层?我可以想到许多模型代码可能需要处理URL(与外部系统集成等)的情况.

ruby-on-rails rails-routing helpermethods

355
推荐指数
5
解决办法
15万
查看次数