2

(警告:無知なレール初心者!)

アルバムビューのshow.html.erbで、アルバムコントローラーのパブリックメソッドを呼び出します。

<% albums_feature = find_albums_with_feature(feature.id) %>

NoMethodErrorを生成します。

そこで、メソッドをアルバムモデルにコピーし、ビューから次のように呼び出してみました。

<% albums_feature = Album.find_albums_with_feature(feature.id) %>

ただし、これもNoMethodErrorを取得します。

このメソッドはどこで定義すればよいですか?

その価値については、メソッドは次のようになります。

  def find_albums_with_feature(feature_id)
    albums_for_feature = Albums.find_by_sql(  
    ["select al.* from albums al, albums_features alfe
    where al.id = alfe.album_id
    and alfe.feature_id = ?", feature_id])
  end
4

2 に答える 2

6

ビューからアクセスできるメソッドが必要な場合は、いくつかのオプションがあります。

  • モデルに入れて
  • ヘルパーに入れる
  • それをコントローラーに入れて、「helper_method :find_albums_with_feature」という行を追加します

しかし、私はあなたがそれをもっとうまくできると思います。まず、検索方法を視野に入れないでください。コントローラーに入れます。次に、独自の検索方法を指定する必要はありません。おそらく、モデルには次のようなものがあります。

class Album << ActiveRecord::Base
  has_many :albums_features
  has_many :features, :through => :albums_features
end

class AlbumsFeature << ActiveRecord::Base
  belongs_to :album
  belongs_to :feature
end

class Feature << ActiveRecord::Base
  has_many :albums_features
  has_many :albums, :through => :albums_features
end

それを使用すると、次のような特定の機能を備えたアルバムを見つけることができます。

@feature = Feature.find(id)
@albums = @feature.albums

また

@albums = Feature.find(id).albums

そしてそれはあなたのコントローラーにあるはずです。ビューでは、結果のみを表示する必要があります。

アソシエーションの詳細については、http: //guides.rubyonrails.org/association_basics.htmlを参照してください。Rails について学ぶには最高の場所だと思います - 少なくとも私にとってはそうです。

于 2009-05-10T16:42:45.327 に答える
2

アルバムモデル。ただし、前に自分が必要です:

def self.find_albums_with_feature(feature_id)
于 2009-05-10T16:28:20.667 に答える