0

状況

  • 私は2つのモデルのケーブルとステータスを持っています
  • ケーブルはステータスに属し、ステータスには多くのケーブルがあります
  • 単一のレコードを返す場所であればどこでも、次のコードが機能します

    @cable.status.stat #where stat is one of the columns in status
    
  • ただし、インデックスはすべてのケーブルを返すため、次のようにしてビューからケーブルにアクセスしようとすると、

    <% @cables.each do |cable| %>
        <td><%= cable.Cable_Hex %></td>
        <td><%= cable.status.stat %></td>
      </tr>
    <% end %>
    

.statが認識されないというエラーが表示されます。.statを削除してcable.statusのままにすると、アドレスが表示されます。

Foreign_idにアクセスしようとすると、問題なく表示されます。明らかに、関連するメソッドはすぐには利用できません。

ビューから関連するモデルメソッドにアクセスするにはどうすればよいですか?

-編集-要求に応じて両方のモデルを含める

ケーブルのモデル

class Cable < ActiveRecord::Base
    belongs_to :user, :inverse_of => :cables
    belongs_to :status, :inverse_of => :cables
end

ステータスのモデル

class Status < ActiveRecord::Base
    has_many :cables, :inverse_of => :statuses  
end
4

2 に答える 2

0

問題の原因は、テストベクトルの欠陥でした。それらは適切に初期化されておらず、このために返されたエラーは、statメソッドが見つからなかったというものでした。これにより、メソッドを渡して表示することに何か問題があると思いましたが、この特定の問題については、考慮すべき2つの側面があることを学びました。ページと適切な関連付けをレンダリングするために現在使用されている情報。

于 2013-01-23T09:27:54.183 に答える
0

アソシエーションのSQLが間違っている可能性があります。

SQL-

Cable.where("cables.status_id IS NOT NULL")

ステータスレコードを取得するには、joinを使用できます

 Status.joins( :cables ).where("cables.status_id IS NOT NULL")

これにより、ケーブルに関連付けられているすべてのステータスレコードが返されます。

次に、それをループしてstat各ステータスを取得できます。

于 2013-01-21T14:31:22.253 に答える