2

ユーザーは、URLを使用してWebアプリの特定のエントリを表示できます。/entry/8、 例えば。エントリが存在しない場合、「エントリが見つかりません」が追加され@messages、エラーページが表示されます。

空白のページの代わりに任意のクエリを表示したいのですが、エラーメッセージを表示し続けるための良い方法がわかりません。任意のクエリのコントローラーで実行する必要のある他のアクションがあるため、クエリとを単に複製することはできませんrender :posts

いくつかのサンプルコード:

モジュールMyApp::Controllers
  クラスComplexQuery<R'/query'
    def get
      @entries = Entrances.all(:conditions => someComplexConditions)
      @entries.complexEnoughまで?次に@entries.makeMoreComplex!終わり
    終わり
  終わり

  クラスSingleEntry<R'/entry /(\ d +)'
    def get(id)
      @entries = Entrances.find_all_by_id(id)
      @entries.nilでない限り?
        レンダリング:投稿
      そうしないと
        @messages=["そのエントリは存在しません。"]
        render:blank#空白のページをレンダリングする代わりに、Controllers::ComplexQueryを実行したい。
      終わり
    終わり
  終わり
終わり
4

2 に答える 2

3

このようなもの?

def get(id)
  @entries = Entries.find_all_by_id(id)
  unless @entries.nil?
    render :posts
  else
    r *MyApp.get(:ComplexQuery)
  end
end

Camping.method_missingを参照してください。

しかし、ComplexQuery をヘルパー メソッドに移動することもお勧めします。

module MyApp::Helpers
  def complex_query(conditions); end
end

次にcomplex_query(something)、SingleEntry と ComplexQuery の両方で実行できます。

于 2010-07-25T11:54:16.800 に答える
0

これを試して:

@entry = Entry.find_by_id(params[:id]) # returns nil when not found
if @entry.nil?
  flash[:notice] = "Entry not found"
  render :action => "recent" 
end
于 2010-04-11T20:25:34.653 に答える