0

私は2つのモデル、活動と都市を持っています

class activity
  has_many :attachments, :as => :attachable 
  accepts_nested_attributes_for :attachments
  belongs_to city
end

class city
  has_many :activties
end

city_controller
  @activity_deals = @city.activities.find_all_by_deals(true)
end

都市を見る

 - @activity_deals.attachments.each do |a|
    = image_tag(a.file.url, :height =>"325px", :width =>"650px" )
       = a.description

undefined method添付ファイルのエラーが表示されます' `

4

4 に答える 4

1

クラスはありAttachementますか?アタッチメント クラスを呼び出そうとして- @activity_deals.attachments.eachいます: ... しかし取得していundefined methodます ...
したがって、このクラスをアプリケーションに追加する必要があります。

class Attachment < ActiveRecord::Base
  belongs_to :activity
end

ただし、 polymorphicを使用しようとしていると思います。

もしそうなら:

class Attachment < ActiveRecord::Base
  belongs_to :attachable, :polymorphic => true
end

class activity
  has_many :attachments, :as => :attachable 
  accepts_nested_attributes_for :attachments
  belongs_to city
end

class city
  has_many :activties
end
于 2012-07-29T10:58:30.297 に答える
1

@activity_deals単一Arrayのオブジェクトではなく、オブジェクトの になります。ActivityActivity

私は HAML ユーザーではないので、構文が間違っている可能性がありますが、おそらく次のようなものを使用できます。

 - @activity_deals.each do |activity|
    - activity.attachments.each do |a|
      = image_tag(a.file.url, :height =>"325px", :width =>"650px" )
         = a.description

エラー メッセージ全体を確認してください。この種の問題をデバッグするのに役立ちます。メッセージ全体は のようなものになり、ではなくundefined method 'attachments' for […]:Arrayを呼び出していることがわかります。attachmentsArrayActivity

于 2012-07-29T11:02:55.947 に答える
1

ビューの都市で@activity_dealsは、配列です。そのため、「添付ファイル」で定義されたメソッドはありません。

配列の各要素の添付ファイルにアクセスする必要があります。

そのように:

- @activity_deals.attachments.each do |a|
= image_tag(a.file.url, :height =>"325px", :width =>"650px" )
   = a.description

- @activity_deals.each do |deal|
  - deal.attachments.each do |a|
    = image_tag(a.file.url, :height =>"325px", :width =>"650px" )
      = a.description

お役に立てれば!

于 2012-07-29T11:15:57.950 に答える
0

一連のアクティビティで attachments メソッドを呼び出しているようです。そのため、 undefined ethod attacments というエラーが発生します。エラーログを教えてください

于 2012-07-29T11:04:25.617 に答える