1

public 属性を持つ一連のページがあります。ルート ファイルで動的ルートを処理したいが、パブリック ページのみを処理したい。

私は現在以下を持っていますが、制限はなく、すべてのページが表示されます。私が望むのは、ページが公開されている場合にのみページに移動し、それ以外の場合は 404 を上げることです。

Page.public.each do |page|
  get "/:slug", controller: 'pages', action: 'show' if page.public?
end
4

2 に答える 2

2

ページは実行時にプライベートからパブリックに変更される可能性があり、本番環境のルートは開始時に一度だけ初期化されるため、この動作をroutes.rbではなくコントローラーに配置します。

class PagesController

  before_filter :is_public, only => [:show]

  protected

    # Check if the page is public, otherwise raise a routing error.
    def is_public
      raise ActionController::RoutingError.new unless Page.find(params[:slug]).public?
    end
end
于 2013-02-18T04:04:40.813 に答える
0

作業コードは(「見つかりません」がありませんでした)

class PagesController

  before_filter :is_public, only => [:show]

  protected

  # Check if the page is public, otherwise raise a routing error.
  def is_public
    raise ActionController::RoutingError.new('Not Found') unless Page.find(params[:slug]).public?
  end
end
于 2013-02-23T16:53:55.433 に答える