1

次のように、探しているページをうまく見つけることができます。

  @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

私は実際に、exists?、nil? などを使用して、これを行ういくつかの方法を試しました。上記が最も基本的な方法です。

そのため、ページを削除すると、レコードが見つからないというエラーが表示されます。

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

プレゼントはいけませんか?メソッドはそのエラーから保護しますか? どうすればいいですか?

4

2 に答える 2

1

EAFPの原則に従ってみませんか?

begin
  @my_page = Refinery::Page.find('foo')
rescue ActiveRecord::RecordNotFound
  @my_page = nil
end
于 2013-10-03T07:01:23.340 に答える
1

あなたがするとき

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

最初にスラッグでページを見つけようとし、見つからない場合は ID で見つけようとします。ローカリゼーションに対処しない場合は、行うことができます

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

見つかった場合は page を返し、見つからない場合は nil を返します。

ローカリゼーションでは複雑になりますが、これでうまくいくはずです

if ::Refinery::Page::Translation.find_by_slug('foo').present?
  @my_page = ::Refinery::Page::Translation.find_by_slug('foo').refinery_page
end
于 2013-10-13T13:50:47.763 に答える