Не уверен, где (модель или контроллер) определить мой метод поиска - PullRequest
2 голосов
/ 10 мая 2009

(Предупреждение: бестолковые рельсы, новичок!)

В моем 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

Ответы [ 2 ]

6 голосов
/ 10 мая 2009

Если вы хотите, чтобы метод был доступен для просмотра, у вас есть несколько вариантов:

  • положи в модель
  • положи в помощник
  • поместите его в контроллер и добавьте строку "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 - по крайней мере, для меня.

2 голосов
/ 10 мая 2009

В модели альбома. Нуждается в себе впереди, хотя:

def self.find_albums_with_feature(feature_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...