0

customercustomer_sitesiteおよびの 4 つのテーブルがありconnectionます。customerand sitehave manycustomer_sitesと a sitehas many connections。これはすべて私のモデルで設定されています。現在、各顧客のビューを作成して、その顧客にリンクされているすべての接続を表示しようとしています。これは私の見解です:

 <% @connection.each do |l| %>
   <tr>
      <td><%= l.interface %></td>
      <td><%= l.device %></td>
      <td><%= l.speed %></td>
      <td><%= l.site.name %></td>
   </tr>
 <% end %>

これが私のコントローラーです:

def show
  @customer = Customer.find(params[:id])
  @connection = Connection.all(where connection.site.customer_site.customer.id == params[:id])
  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @customer }
  end
end

明らかにその@connection部分が正しくありません。レコードを正しくリンクするためにそこに何を入れる必要があるのか​​ わかりません...

4

1 に答える 1

1

@Matt が彼のコメントで述べているように、最も簡単な方法は、オプションhas_manyで関連付けを使用することです。:through詳細については、Railsガイドを参照してください。

class Site < ActiveRecord::Base
  has_many :customer_sites, foreign_key: :site_id
  has_many :connections
end

class CustomerSite < ActiveRecord::Base
  belongs_to :site
  belongs_to :customer
end
 
class Customer < ActiveRecord::Base
  has_many :customer_sites, foreign_key: :customer_id
  has_many :sites, through: :customer_sites
  has_many :connections, through: :sites
end

コントローラーで:

def show
  @customer = Customer.find(params[:id])
  @connections = @customer.connections
  ...
end

十分に明確でない場合はお知らせください。

于 2013-05-23T13:25:02.453 に答える