2013-07-16 6 views
0

Я реализую базовую функцию тегов для своего приложения. Новое для рельсов.rails добавляет теги к контроллеру

У меня есть модель листинга, и я работаю в индексе listings_controller #. Когда пользователь переходит на страницу листинга и устанавливает параметр: 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 

-осна- имеет следующие colums:

id, tag_id, listing_id 

Метки имеет следующие столбцы:

id, name 

Любое руководство было бы оценено, пытаясь исправить это ненадолго.

ответ

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 
+0

Спасибо, что получил это работает! Мне просто пришлось немного изменить свой взгляд, поскольку я обращался к листингу через каждого пользователя. благодаря! –

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