Как найти и отобразить группу объектов с определенным тегом, используя действия как тегируемые (редукс)?

Я хочу отобразить список статей в представлении показа моего тега. Я использую действия в качестве тегового плагина redux в приложении Rails 2.3.2 и SQLite3. Я дошел до основного примера, присваивая теги и затем отображение их списка со статьей.

Теперь я хочу отобразить список статей, принадлежащих тегу, но получаю следующую ошибку:

undefined method `article' for #<Tag id: 1, name: "various", taggings_count: 1>

Модели

/статья.рб

class Article < ActiveRecord::Base  
  acts_as_taggable
end

/user.rb

class Tag < ActiveRecord::Base  
  acts_as_tagger
end  

Контроллер

/tags_contoller.rb

def show
  @tag = Tag.find(params[:id])
  @articles = @tag.articles
end  

Вид

/tags/show.html.erb

<% for article in @articles %>  
   ...  
<% end %>  

Вот ссылка на файл переноса.

Большое спасибо.


person Nick    schedule 19.06.2009    source источник


Ответы (3)


Я считаю, что здесь виноват не плагин, а sqlite, который доставляет вам проблемы. Я сталкивался с этим раньше - кажется, sqlite не может понять синтаксис «table_name.column_name», хотя он не упоминается на веб-сайте. В моем случае я просто переключился на MySQL, и все прошло без проблем. Посмотрите, поможет ли это.

person alex.zherdev    schedule 19.06.2009
comment
Спасибо за быстрый ответ. У меня возникли проблемы с работой MySQL Gem в Rails 2.3.2. Сообщит вам, если это решит вышеуказанную проблему. - person Nick; 20.06.2009
comment
Наконец-то MySQL работает с рельсами 2.3.2. К сожалению, это не решило проблему, которая была больше связана с моим непониманием плагина :). - person Nick; 20.06.2009

Проблема в том, что у вас есть модель с именем Object. Дайте ему имя, которое не пересекается с системными классами Ruby, например, ApplicationObject или MediaObject.

Я мог бы предположить, почему это вызывает проблемы, но это были бы только предположения. Открытые классы — замечательная особенность Ruby, но это означает, что вам нужно быть осторожным с именами своих классов, чтобы они отличались от классов Ruby и Rail.

person Sarah Mei    schedule 20.06.2009
comment
И переименуйте все ваши ссылки на объект, @objects и т. д. тоже. - person Sarah Mei; 20.06.2009
comment
мои извинения, называя объект модели, я давал общее имя помеченному предмету. Я изменил объект на статью, чтобы было понятнее. Спасибо, что указали на это. - person Nick; 20.06.2009
comment
Да, теперь, когда я думаю об этом, если бы у вас действительно была модель с именем Object, она бы вышла из строя намного раньше и более таинственным образом. :) - person Sarah Mei; 21.06.2009

Большое спасибо Geemus, автору taggable redux, за то, что объяснил мне это.

Чтобы отобразить список статей с определенным тегом, мне просто нужно было изменить tags_controller с:

/tags_contoller.rb

def show
  @tag = Tag.find(params[:id])
  @articles = @tag.articles
end

to:

Контроллер /tags_contoller.rb

def show
  @tag = Tag.find(params[:id])
  @articles = @tag.tagged
end
person Nick    schedule 20.06.2009