4

ユーザーにページを表示する「pages_controller」というコントローラーを使用して、RubyonRailsアプリケーションを作成しています。表示できるページは3種類あり、それぞれの場合にバックエンドで異なることが発生する必要があるため、コントローラー内で機能を3つのメソッドに分割することにしました。ユーザーがページをリクエストすると、「show」メソッドが呼び出され、ページが次のいずれかであるかどうかが判断されます。1.ユーザーに属している2.別のユーザーに属し、リクエストしているユーザーが表示できる3.別のユーザーに属している、およびそれを要求しているユーザーが表示することはできません(許可されていない)

次に、そこから適切なメソッドが呼び出され、ページが表示されます。コードは次のようになります。

def show
    if (something)
      showMine

    elsif (something else)
      showAnother
    else
      showUnauthorized
    end
end

def showUnauthorized

    respond_to do |format|
      format.html # showUnauthorized.html.erb
    end
end

def showMine

    respond_to do |format|
      format.html # showMine.html.erb
    end
end

def showAnother

    respond_to do |format|
      format.html # showAnother.html.erb
    end
end

「show」が呼び出されたときにrailsがビューをレンダリングしたいのですが、「show」が呼び出されたときにビューをレンダリングしたくないため、テンプレートが見つからないというエラーが発生します。そこから「show」で正しいメソッドを呼び出し、そのメソッドに対応するビュー(showMine、showAnother、またはshowUnauthorized)をレンダリングしたいだけです。これどうやってするの?それとも私はこれを完全に間違った方法で行っていますか?

4

2 に答える 2

3

これらはRESTfulルートに属していないため、routesファイルで作成したこれらの新しいアクションを宣言する必要があります。
コントローラーにshowアクションのみを保持し、renderメソッドを使用してshowビューにIFを作成し、partials(_showMine.html.erb、showAnother.html.erb、showUnauthorized)を含めることをお勧めします。

例:

ビューを表示:

if (something)
  <%= render 'showMine' %>
elsif (something else)
  <%= render 'showAnother' %>
else
  <%= render 'showUnauthorized' %>
end

お役に立てば幸いです...

于 2012-05-30T00:06:59.133 に答える
2

私は基本的にサミーのコメントに同意しますが、ここにいくつかの背景があります:

Railsに使用するビューを指示するメソッドはですrender。メソッドにそのメソッドの呼び出しがない場合show、Railsはshow.xxx.xxx、たとえばshow.html.erb、レンダリングされるはずのビューがあると想定します。showこれはメソッドの名前であるため、テンプレートの前にプレフィックスが付けられるとは想定されていないことに注意してください。それがアクションshowの名前だからだと思います。アクションの名前は、リクエストの一部としてコントローラーに渡されます。これは、ブロックが含まれているメソッドの名前から単純に派生したものではありません。respond_to

すべてのrespond_toブロックは、リクエストのMIMEタイプに基づいて異なるビューテンプレートを指定するだけですが、呼び出すことはないため、Railsに他の人に指示したことがないためrender、これらの追加のメソッドはすべて、ビューを呼び出そうとしshowます(show.html.erbすべての場合)。renderビューであり、アクション名はshowです。

したがって、respond_toブロックの代わりに、render [some_view]他の各メソッドを呼び出すだけです。

これは最も明確な答えではないかもしれませんが、以下も読むことをお勧めします。

http://ryanbigg.com/2009/04/how-rails-works-2-mime-types-respond_to/

respond_toをするのか、特にどのビューをレンダリングするかを決定するためにアクション名をキーオフする方法について説明します。

于 2012-05-30T02:40:03.033 に答える