2012-05-30 2 views
1

Если бы я использовал этот код для настройки системы тегов для моего приложения, как бы я мог визуализировать сообщения с тегами, которые я им назначил. Например, если я назначен спортивный тег в пару постов, как бы я тогда отображал все сообщения со спортивным тегем присвоенного емурендеринг сообщения с назначенным тегом

rails g model tag name:string 
rails g model tagging article_id:integer tag_id:integer 
rake db:migrate 

class Tagging < ActiveRecord::Base 
    belongs_to :article 
    belongs_to :tag 
end 

class Tag < ActiveRecord::Base 
    has_many :taggings, :dependent => :destroy 
    has_many :articles, :through => :taggings 
end 

class Article < ActiveRecord::Base 
    has_many :comments, :dependent => :destroy 
    has_many :taggings, :dependent => :destroy 
    has_many :tags, :through => :taggings 
    validates_presence_of :name, :content 
    attr_writer :tag_names 
    after_save :assign_tags 

    def tag_names 
    @tag_names || tags.map(&:name).join(' ') 
    end 

    private 

    def assign_tags 
    if @tag_names 
     self.tags = @tag_names.split(/\s+/).map do |name| 
     Tag.find_or_create_by_name(name) 
     end 
    end 
    end 
end 

<p> 
    <%= f.label :tag_names %><br /> 
    <%= f.text_field :tag_names %> 
</p> 
+0

не ответ это 'tag.articles'? – PeterWong

+0

ли это сделать сообщение с определенным тегом? –

+0

Как и в ответе @Chris Mohr, он выдавал бы столбы с тегом «спорт». Rails автоматически создает правильный SQL на основе 'has_many: through'. Вы можете проверить, что sql генерируется в журнале разработки :) – PeterWong

ответ

1

Может быть что-то вроде этого:

# TagsController 
def show 
    @articles = Tag.find_by_name('sports').articles 
end 

# tags/show.html.haml 
- @articles.each do |article| 
    = render :partial => :article 
+0

о том, было ли более чем один тег, например, спорт и политика и т. Д. –

+0

Вы, вероятно, используете метод tag.id в методе show. '@articles = Tag.find (params [: id]). articles' Ссылка на тег:' tag_url (tag) '. –

+0

будет <% = рендерить tag_url (тег), sports.articles%> в представлении –

Смежные вопросы