0

私には4つのテーブルリーグ、ディビジョン、チーム、コーチがいます。リーグとして記述されているこれらのテーブル間の関係には多くの部門があり、部門には多くのチームがありますが、チームには1人のコーチしかいません。また、チームに関連付けられている部門を通じて、チームからリーグを照会したいと思います。

私の現在の設定:

class League < ActiveRecord::Base
  has_many :divisions
  has_many :teams, :through => :divisions, :readonly => true
  has_many :coaches, :through => :teams, :readonly => true
end

class Division < ActiveRecord::Base
  belongs_to :league
  has_many :teams
end

チームのロゴをアップロードするためにペーパークリップを使用していることをこの点で正しく言及する必要があります。ただし、ストレージパスを/public/assets/images/teams/[division_name]/:style/:basename.:extensionのように変更したい場合、使用するチームの部門名を取得する方法がわかりません。ファイルシステムストレージのパスとURL。

class Team < ActiveRecord::Base
  belongs_to :division
  belongs_to :league
  belongs_to :stadium

  has_many :players
  has_one :coach

  has_attached_file :logo, :styles => { :large => "120x180>", :thumb => "100x100>", :tiny => "25x25>" },  
      :url => "/assets/images/teams/#{name}/:style/:basename.:extension",  
      :path => ":rails_root/public/assets/images/teams/#{name}/:style/:basename.:extension"

end

class Coach < ActiveRecord::Base
  belongs_to :division
  belongs_to :league
  belongs_to :stadium
  belongs_to :team
end

これまでの私の問題:

  1. 正しく設定していますか?リーグやディビジョンのコーチやチームに質問したいということは非常に重要です。
  2. Teamクラスでは、チームの部門名を返すメソッド(またはそれが呼び出すもの)を定義して、その部門名を上記のようにストレージ構成のURLとパスに含めます。

どんな助けでも大歓迎です!

更新:self.division.name team.rbクラスで使用して、チームの部門の名前を取得しようとしました:

has_attached_file :logo, :styles => { :large => "120x180>", :thumb => "100x100>", :tiny => "25x25>" },  
      :url => "/assets/images/teams/#{self.division.name}/:style/:basename.:extension",  
      :path => ":rails_root/public/assets/images/teams/#{self.division.name}/:style/:basename.:extension"

ただし、次のエラーメッセージが表示されます。

`method_missing': undefined method `division' for #<Class:0x10c6a2900> (NoMethodError)
4

1 に答える 1

0

これが必要かどうかはわかりませんが、関連付けられたオブジェクトを取得するのは非常に簡単です。

# in team.rb
self.division.name #self is not required

# in division.rb
self.teams.first.name

has_many :teams, :through => :divisionsただし、リーグクラスは、チームにリンクされているディビジョンにすでにリンクされているため、必要ありません。多対多の関連付けを設定する場合にのみ、「has_manythrough」を使用します。

# in league.rb
self.divisions.first.teams.first

画像を取得するために使用することもできasset_path('teams/my-name/some-file.jpg')ますが、ビュー、ヘルパー、およびコントローラーでのみアクセスできると思います。

于 2012-08-26T19:44:01.627 に答える