防弹方式在Refinery Cms中查找页面

时间:2013-09-19 19:34:03

标签: ruby-on-rails-3 activerecord refinerycms

我可以找到一个我正在寻找的页面,就像这样:

  @my_page = ::Refinery::Page.find('foo')

所以我可以说<%link_to @ my_page.url%>

然后我尝试防止删除该页面的情况,如下所示:

  if ::Refinery::Page.find('foo').present?
    @my_page = ::Refinery::Page.find('foo')
  else
    @my_page = nil
  end

我实际上尝试了几种方法,使用存在?,使用nil?等,以上是最基本的。

然后我去删除我的页面,我得到一条未找到记录的错误。

Couldn't find Refinery::Page with id=foo

现在不应该吗?方法防止该错误?我该怎么做?

2 个答案:

答案 0 :(得分:1)

如何遵循EAFP的原则?

begin
  @my_page = Refinery::Page.find('foo')
rescue ActiveRecord::RecordNotFound
  @my_page = nil
end

答案 1 :(得分:1)

当你这样做时

@my_page = ::Refinery::Page.find('foo')

它首先尝试通过slug查找页面,如果找不到,那么它会尝试通过id找到它。 如果你不处理本地化,你可以做

@my_page = ::Refinery::Page.find_by_slug('foo')

如果找到它将返回页面,如果不找到则返回nil。

通过本地化,它变得复杂,但这应该可以解决问题

if ::Refinery::Page::Translation.find_by_slug('foo').present?
  @my_page = ::Refinery::Page::Translation.find_by_slug('foo').refinery_page
end