rails将标签添加到控制器

时间:2013-07-16 05:21:58

标签: ruby-on-rails ruby ruby-on-rails-3

我正在为我的应用实施基本标记功能。铁路新手。

我有一个列表模型,我正在使用listing_controller #index。当用户进入列表页面并设置:tag参数时,我希望@users仅保留与该标记匹配的用户。

因此,如果他们转到www.example.com/listings?tag=foo,则只会加载已使用foo标记的页面。这是我到目前为止所提出的,但它存在一些问题。

def index
  if params[:tag]
    @id = Tag.where(:name => params[:tag]).first.id
    @listingid = Tagging.where(:tag_id => @id) 

    @listingid.each do |l|
      @users = User.find(l.listing_id)
    end
  else
    @users = User.all
  end
end

我不知道如何循环并将每个找到的用户添加到@users。我想我可能会以错误的方式处理这一切。我的标签/标签模型如下所示:

tag.rb

class Tag < ActiveRecord::Base
    has_many :taggings
    has_many :listings, through: :taggings
end

tagging.rb

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

Taggings有以下列:

id, tag_id, listing_id

标签包含以下列:

id, name

任何指导都会受到赞赏,试图解决这个问题一段时间没有运气。

1 个答案:

答案 0 :(得分:1)

尝试

def index
  @tag = Tag.where(:name => params[:tag]).first
  if @tag
    @listings = @tag.listings.includes(:user)
    @users = @listings.map{|l| l.user}
  else
    @users = User.all
  end
end