まず、関連付けに関する RoR ガイドを読むことを強くお勧めします:
http://guides.rubyonrails.org/association_basics.html
RoR でアソシエーションを使用するのが初めての場合でも、修正が必要な場合でも、そのガイドをお読みください。
あなたの質問は論理的な質問のようですが、そのコードから始めます。
class Record < ActiveRecord::Base
has_and_belongs_to_many :fields
...
class Field < ActiveRecord:Base
has_and_belongs_to_many :records
belongs_to :tag
...
class Tag < ActiveRecord:Base
has_many :fields
...
各レコードは多くの異なるフィールドに接続し、各フィールドは多くの異なるレコードに接続します。これは、多対多の関連付けの典型的な例です。これらのモデルを実際に使用するときのコード内のロジックは、レコード モデルをコンテナーのように見せるものです (技術的には、フィールドは多くのレコードのコンテナーであると言えるからです)。
各フィールドには 1 つのタグが関連付けられていますが、同じタグを任意の数のフィールドで使用できます (フィールドはタグを再利用していると言えます)。これは 1 対多の関連付けです。この接続を作成するときは、Field モデルで belongs_to を使用し、Tag モデルで has_many を使用します。
タグはフィールド モデルに接続されているため、探しているロジック: レコードはフィールドとタグのコンテナーであり、このセットアップでは理にかなっています。
レコード内のタグをフェッチする簡単な例を次に示します。
#Returns the Tag Associated with the first field
#"inside" the first Record in the database.
Record.first.fields.first.tag
同様に、簡単に反対方向に進むこともできます:
Tag.first.fields.first.records.first
コマンドラインからRailsコマンドを活用して、移行とモデルをすばやくセットアップしてください。関連付けが削除されたとき、保存されたときなどにどのように関連付けを処理するかに関するオプションについては、上部のガイドを読んで、探しているものを見つけてください。