0

Ruby on Rails 3.2.2 を使用していますが、関連するオブジェクトを処理するための一般的な方法を知りたいですhas_many :through ActiveRecord::Association。つまり、私は持っています:

class User < ActiveRecord::Base
  has_many :article_editor_associations, :class_name => 'Articles::UserEditorAssociation'
  has_many :articles, :through => :article_editor_associations
end

class Article < ActiveRecord::Base
  has_many :user_editor_associations, :class_name => 'Articles::UserEditorAssociation'
  has_many :editor_users, :through => :user_editor_associations
end

class Articles::UserAssociation < ActiveRecord::Base
  belongs_to :editor_users
  belongs_to :articles
end

上記のコードを使用することで、メソッドを実行してEditorのを@article.editor_users取得できます。ただし、アプリケーションにより良く適合させるために (つまり、たとえば、I18n 翻訳などを「プログラムによる」方法で処理するために)、次のような新しいモデルをアプリケーションに追加することを考えています。以下:Array User

class EditorUser < User # Note the class name and the class inheritance
  ...
end

このようにして、私のアプリケーションを通じて、EditorUser記事の「エディター ユーザー」インスタンスをUserオブジェクトであるかのように処理するために、クラスを参照できEditorUserます。 scope メソッド) インスタンスのみで利用可能EditorUser(インスタンスではなくUser)...

私の場合、作りたいものを作るのは「一般的な」アプローチですか?それは「Rails Way」ですか?もしそうなら、この状況を処理するために私は何ができる/すべきですか? いいえの場合、どのように進めればよいですか?


EditorUser < User ... endつまり、関連付けられたオブジェクト (メソッドEditorUserを実行して取得) はオブジェクトであるため、クラスを使用することを考えました。ディレクトリ (または他の場所) でクラスを指定することで、アプリケーション内の作業を簡素化できると思います。これは、その定数名を回避できるためです (たとえば、翻訳文字列を「構築」するためにその定数名を「再生」したり、インスタンスに使用するためだけに新しいメソッドを記述することによって)。@article.editor_usersUserEditoUserapp/modelsEditorUser

4

1 に答える 1

1

Rails では、最初に命名規則と標準的な使用方法 (構成よりも「規則」) に焦点を当てることを学び、次のように設定します。

class User < ActiveRecord::Base
  has_many :editors
  has_many :articles, :through => :editors
end

class Article < ActiveRecord::Base
  has_many :editors
  has_many :users, :through => :editors
end

class Editor < ActiveRecord::Base
  belongs_to :user
  belongs_to :article
end

User.editor などの結合レコードの存在を使用するか、別のエディター アクセス レベルが必要な場合はエディターに追加の属性を追加できます。

上記はおそらくあなたの質問に完全には答えていませんが、良い出発点になるはずです。私がこれを言うのは、Rails に関する最も重要なことの 1 つは、Rails が「設定より規約」の原則を使用しているためです。簡潔で最小限のコードにつながるため、これは良いことです。無数の慣習をすべて学ばなければならないので、それは悪いことです。それらやフレームワークをよく知らないと、私が長年取り組んできた多くの Rails アプリケーションで見たように、山ほどの問題に巻き込まれる可能性があります。

だから私のアドバイスは本当に後退することです。クラスの名前変更などを強制的に機能させようとしないでください。私が示した設定がニーズを満たさない場合は、ニーズを再確認し、API でのアクティブなレコードと関連付けの詳細をお読みください。Railsを使うと、これがしばらくイライラするかもしれませんが、長期的に優れたRailsプログラマーになるには、正しい方法で物事を行う方法を実際に検討する必要があります.

于 2012-08-19T12:06:31.040 に答える