Rails路由到第一条记录

时间:2015-10-28 12:04:00

标签: ruby-on-rails routes

我有以下链接:

<%= link_to 'About', url_for(Page.first) %>

我更愿意拥有一条命名路线,而不是这样:

<%= link_to 'About', first_page_path %>

我知道我可以创建一个帮助方法来实现这一点,但我想知道是否有一种&#39; Rails方式&#39;这样做?

2 个答案:

答案 0 :(得分:1)

我不会详细介绍'为什么你会想要这样的事情'。我不认为你能得到你想要的东西。当应用程序启动时会加载路由,那么当前第一条记录被删除时会出现什么行为?

我建议使用你所谈到的辅助方法但有一点点扭曲

def first_or_record(page_id = nil)
   Page.find_by(id: page_id) || Page.first
end

答案 1 :(得分:1)

要做到这一点并不是一件非常棘手的事情,很难就这种做法提出建议。但是,关于&#39;关于&#39;刚刚成为数据库表中第一页的页面非常脆弱,应该被锁定在某个模型中,因为模型具有逻辑性。我会做这样的事情

#route
get '/about', to: 'page#about'

将转到Page控制器&#34;关于&#34;行动,这是解决这个问题的最合适方式。

然后在页面控制器中我会有

def about
  @page = Page.about_page
  #render the Page show action or whatever
end

然后又使用此Page类方法

#in Page model
#class methods
class << self
  def about_page
    self.first
  end
end 

这样,如果您决定使用一种不那么脆弱的方式来选择要用于关联的页面,那么它将改变模型方法,并且URL,控制器等保持不变。< / p>

现在,在您看来,您可以像

一样链接到它
<%= link_to 'About', "/about" %>