2015-04-23 3 views
0

Существует множество оценок, действий и пользователей. Каждая таблица имеет следующую строку:Как скрыть от Feed?

t.boolean "conceal",  default: false 

При подаче оценки может быть сделано верно:

pry(main)> Valuation.find(16) 
 
    Valuation Load (0.1ms) SELECT "valuations".* FROM "valuations" WHERE "valuations"."id" = ? LIMIT 1 [["id", 16]] 
 
=> #<Valuation:0x007fbbee41cf60 
 
id: 16, 
 
conceal: true, 
 
user_id: 1, 
 
created_at: Thu, 23 Apr 2015 20:24:09 UTC +00:00, 
 
updated_at: Thu, 23 Apr 2015 20:24:09 UTC +00:00, 
 
likes: nil, 
 
name: "CONCEAL NEW">

Это предотвращает других пользователей видеть эту оценку-х :name на своем профиле с помощью @valuations = @user.valuations.publish в users_controller & scope :publish, ->{ where(:conceal => false) } in valuations.rb.

Как мы можем также скрыть эту оценку в фиде деятельности? Вот эта же оценка нашла как деятельность:

Activity.find(24) 
 
    Activity Load (0.1ms) SELECT "activities".* FROM "activities" WHERE "activities"."id" = ? LIMIT 1 [["id", 24]] 
 
=> #<Activity:0x007fbbebd26438 
 
id: 24, 
 
user_id: 1, 
 
action: "create", 
 
test: nil, 
 
trackable_id: 16, 
 
trackable_type: "Valuation", 
 
created_at: Thu, 23 Apr 2015 20:24:09 UTC +00:00, 
 
updated_at: Thu, 23 Apr 2015 20:24:09 UTC +00:00, 
 
conceal: false>

Вы видите, как она ложна здесь? Как мы можем это сделать?

class Activity < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :trackable, polymorphic: true 
    scope :publish, ->{ where(:conceal => false) } 
end 


class ActivitiesController < ApplicationController 
    def index 
     @activities = Activity.publish.order("created_at desc").where(user_id: current_user.following_ids) 
    end 
end 

ответ

1

В вашей модели деятельности фактически не требуется логическое значение. Просто создайте метод getter, который получает значение маскировки из записи оценки.

class Activity < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :trackable, polymorphic: true 
    scope :publish, ->{ where(:conceal => false) } 

    def conceal 
    trackable.conceal 
    end 
end 
+0

Спасибо, что так много я занимаюсь этой проблемой на века :) –

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