1

Rails でネストされたリソース ルートを操作しているときに気づいたことの 1 つは、子リソースが存在するルートにユーザーがアクセスすることは技術的に可能である (したがって正しく表示される) ことですが、親リソースの ID は、実際には子リソースに関連していません。

たとえば、 routeでは、に対応する投稿を行わなかったユーザーを表すusers/:user_id/post/:idroute を入力できます。:user_id:id

ユーザーが無効な URL にアクセスした場合に、サーバーがユーザーを正しい URL にリダイレクトするようにするには、これを修正する最善の方法は何でしょうか?

これを処理するためにコントローラーにいくつかのコードを既に入れていますが、特に URL ヘルパーがアクションごとに異なるため、すべてのコントローラー アクションでパスを確認してからユーザーを適切な URL にリダイレクトする必要があるのはちょっと厄介です。

( edit_user_post_path(@user, @post), new_user_post_path(@user, @post))

もっと良い方法があるはずですよね?

4

2 に答える 2

2

before_filterユーザーが有効であることを確認するすべてのリクエストで実行する必要があります。ActiveRecord::RecordNotFoundそうでない場合は、フレンドリーな 404 ページをスローして表示します。

次に、必要に応じてユーザーに基づいて投稿を取得しますbefore_filter。ユーザーに基づいて投稿検索を行います。以下の私の例は、別の でこれを行うことを示していますbefore_filter

before_filter :find_user_by_user_id
before_filter :find_post

def show
  # Use @post variable here however you need
end

private

def find_user_by_user_id
  @user = User.find(params[:user_id])
end

def find_post
  # This assumes you have an association set up as needed
  @post = @user.posts.where(id: params[:id]).first

  if @post.nil?
    # Do whatever you need here
  end
end
于 2012-08-08T17:57:42.623 に答える
0

まず、ROR によって発生するエラーは、本番環境では「申し訳ありませんが、探しているページは存在しません」というメッセージが表示されることを知っておく必要があります。

したがって、私はそれについて心配することはありません。失敗を「キャプチャ」して安全な領域にすばやくリダイレ​​クトしたい場合は、このrescue方法の使用に興味があるかもしれません。

http://www.simonecarletti.com/blog/2009/12/inside-ruby-on-rails-rescuable-and-rescue_from/

楽しんで

于 2012-08-08T14:25:26.667 に答える