19

config/routes.rbで制約として使用されるカスタム制約クラスを配置するRailsのベストプラクティスについて知りたいだけです。Rails.root/libすべてのユーザークラスが行くところのようです。これは適切ですか?制約のために内部にディレクトリを作成する必要がありますか?現在、2つの空のディレクトリが存在assetstasksます。これには慣習がありますか?

4

2 に答える 2

21

lib/が適切な場所になります。よりきれいにしたい場合は、それを入れて、lib/constraint/authenticated.rbそのように制約を定義します

module Constraint
  class Authenticated
    def matches?(request)
      # stuff
    end
  end
end

そしてあなたのroutes.rb

constraints Constraint::Authenticated.new do
  match 'account' => 'account#index'
end
于 2012-10-23T19:00:02.457 に答える
11

ガイドがそのパスについて何も述べていないのは奇妙ですが、lib/constraintsは API ( ActionDispatch::Routing::Mapper::Scoping )にもリストされています。

ルートにとって複雑すぎる場合は、このロジックをクラスに移動できます。このクラスにはmatches?、ユーザーにそのルートへのアクセスを許可する必要がある場合は true を返し、許可しない場合は false を返すメソッドが定義されている必要があります。

class Iphone
  def self.matches?(request)
    request.env["HTTP_USER_AGENT"] =~ /iPhone/
  end
end

このコードの予想される場所はlib/constraintsです。

于 2013-05-23T16:47:49.943 に答える