如何进行私人活动?

How to make private activities?

我们如何为用户提供将活动设为私密的选项?这将为用户提供他们只希望自己看到的帖子的隐私。

这是我的一次尝试,它给了我:

NoMethodError in ActivitiesController#index undefined method 'public_activities' 行:@activities = Activity.public_activities.order("created_at desc").where(current_user.following_ids)

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


class Activity < ActiveRecord::Base
  belongs_to :user
  has_many :comments, as: :commentable
  belongs_to :trackable, polymorphic: true

  def public?
    !private
  end
end

create_table "activities", force: true do |t|
  t.boolean "private", default: false
  t.integer  "user_id"
  t.string   "action"
  t.integer  "trackable_id"
  t.string   "trackable_type"
  t.datetime "created_at",     null: false
  t.datetime "updated_at",     null: false
end

class User < ActiveRecord::Base
  has_many :activities
  def public_activities
    activities.find(&:public?)
  end
end

并且在其中一个 _forms 中,例如 @valuations@goals,用户可以通过提交来区分:

 <%= button_tag(type: 'submit', class: "btn", id: "gold")  do %>
   <span class="glyphicon glyphicon-plus"></span> Public
 <% end %>

 <%= button_tag(type: 'submit', class: "btn") do %>
   <% :private %><span class="glyphicon glyphicon-plus"></span> Private
 <% end %>

此代码的大部分灵感来自此处的答案:

谢谢!

class User < ActiveRecord::Base
  has_many :activities
  def public_activities
    activities.find(&:public?)
  end
end

这定义了一个名为 public_activities 的新 instance 方法 - 您将只能在 user

的实例上使用它
class ActivitiesController < ApplicationController
  def index #Added .public_activities
    @activities = Activity.public_activities.order("created_at desc").where(current_user.following_ids)
  end
end

在这里,您试图在 Activity class 上调用 class 方法。

如果您想执行上述操作,则需要在 Activity class.

上创建一个范围

在这种情况下,名字中的"activities"部分最好不要重复,直接叫"public"

例如

class Activity < ActiveRecord::Base
  belongs_to :user
  has_many :comments, as: :commentable
  belongs_to :trackable, polymorphic: true

  scope :public, ->{ where(:private => false) }

  def public?
    private == true ? false : true
  end
end


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