【发布时间】:2012-06-04 07:57:17
【问题描述】:
如果我使用此代码为我的应用程序设置标签系统,那么我将如何使用我分配给它们的标签来呈现帖子。例如,如果我为几个帖子分配了一个运动标签,那么我将如何渲染所有带有分配给它的运动标签的帖子
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>
【问题讨论】:
-
答案不是
tag.articles吗? -
这会呈现带有特定标签的帖子吗?
-
与@Chris Mohr 的回答类似,它会呈现带有“sports”标签的帖子。 Rails 会根据
has_many :through自动构建正确的 SQL。您可以检查开发日志中生成的 sql :)
标签: ruby-on-rails ruby ruby-on-rails-3 tags render