companies (id, serial...), user (id, serial, company_id...)
のようなテーブルを持つRails(4.2.6)アプリケーションがあります。ここで、serialはランダムに生成された5〜20文字の長い文字列であり、テーブルごとに一意です。私は何を達成しようとしていること/companies/:serial
と/users/:serial
のようなルートを持っていることです...Rails - 優先ルートパラメータ - GLOBALLY
私はdocumentationを読んだことがある、とroutes.rb
で、次の操作を行うことができます。
resources :companies, param: :serial
resources :users, param: :serial
、それはあまりにも乾燥していないのです。..これをグローバルに行う方法はありますか?私はこれを1行(resources :companies, :users, param: :serial
)にすることができることを知っていますが、他の名前空間にはルールを適用したい別のテーブルがあります。
私が考えていた別のものは、シリアルキーをプライマリキーとして持っていましたが、自動インクリメント整数を好んで、user.company_serial
の10〜20文字の長さの値を持つカラムを使用してデータベースを浪費したくありません...
は私が私のリソースの周りparam: :serial
でスコープを作成しようとしている:
path_names
(マニュアルに
hereを読む)しかし、それは、所望の効果を持っていなかったとのような
scope param: :serial do
resources :companies
...
end
ではなく記号でparams[:param]
を追加しました値私は本当に理解していない何らかの理由で。
また、メソッドto_param
の存在についても知っていますが、私がよく理解していれば、モデルで使用する必要があります。同じコードを複数のモデルと同じ数だけ書く必要があります。
各テーブルに明示的に指定することは、必ずしも悪いことではありません。 DRYはRubyであまりにも遠すぎます(クリップのソースコードを読んでください)。私は、明示的にそれを定義している各テーブルがローカル空間のシリアルリソースであると思います。最初の2つの行を1つにまとめることは実用的だと思われます。 – Pyrce
@Pyrce、そうですが、アプリケーション全体のルールを適用したいと思います。sheep1が白、sheep2が白、sheep3がwhite ...のようにSheperdが羊を列挙し始めたように感じますすべての羊は白であると言っているのではなく、400人がいる。結局のところ、それは他の方法がなければ私がやろうとしていることだよ。 – Misu