1

ツイートへのツイートは大したことではありません。そして、私はが大騒ぎのないになると思います。私はサボテンがサボテンになったことで彼らを信用するでしょうが間違っているなら私を訂正してください)。

しかし、クラスBarnabusがある場合はどうなりますか?そのテーブルをbarnabuss、barnabi、またはbarnabussesと呼びますか?zxzzyはどうですか?英語以外の単語はどのように処理されますか?資本増強と複数化を無効にするための厄介でないオプションはありますか?

Railsは初めてで、変更されたテーブル名は少しおかしくなります。関連ドキュメントへのリンクをいただければ幸いです。これは私がこれに関連して見た唯一のドキュメントであり、テーブル名の奇妙な例外を理解するのに役立ちません。

これがすでにカバーされている場合はご容赦ください。私が得た結果は、私が理解しようとしているものとは正確には一致しませんでした。

4

3 に答える 3

6

String#pluralizeヒューリスティックを使用し、英語のかなり単純な一般規則をベースとして、いくつかの既知の一般的な例外を追加します。

を使用しActiveSupport::Inflectorて、その動作をカスタマイズできます。Railsプロジェクトでは、語尾変化の構成をで見つけることができますconfig/initializers/inflections.rb

Barnabus対応するテーブルを使用してモデルを作成する場合barnabiは、inflections.rbのコンテンツのコメントを解除し、この単語の処理方法をRailsに明示的に指示するだけです。

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'barnabus', 'barnabi'
end

PS編集してくれたHolgerに感謝します。

于 2013-02-05T22:21:09.787 に答える
1

ほとんどの場合は信頼できますが、複数形の名前がわかりにくい疑わしいモデル名がある場合は、Modelでいつでもテーブル名を指定できます。例えば

class SomeName < ActiveRecord::Base
  self.table_name = 'any_name'
end
于 2013-02-05T22:22:21.180 に答える
0

ビュー/エラーメッセージの複数化が懸念される場合、Railsがトリッキーなテーブル名の複数化で見事に失敗する状況では、アプリにローカリゼーションを追加して、さまざまなコンテキストで何を使用するかを指定できます。http://guides.rubyonrails.org/i18n.html#translations-for-active-record-modelsを参照してください

実行中の複数化ルールの例を次に示します。

activerecord:
    models:
      barnabus:
        zero: Barnabi
        one: Barnabus
        few: Barnabi
        other: Barnabi
于 2013-02-05T22:28:09.240 に答える