如何使用私人提交来隐藏Feed?

7 ruby ruby-on-rails feed railscasts public-activity

在评估表单中,有一个提交按钮和一个<%= f.submit :private %>按钮.如果单击私人提交,则提交的信息将隐藏给查看该个人资料的其他用户.

我们如何使用<%= f.submit :private %>隐藏提交的信息来显示Feed?

活动/ index.html.erb

<h1>Feed</h1>
<% @activities.each do |activity| %>
<% if current_user == @user %>
    <%= render_activity activity %>
  <% else %>
    <%= render_activity activity %> #We'd need to make .public_valuations work with this without getting an undefined method error.
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

activities_controller.rb

class ActivitiesController < ApplicationController
  def index
    @activities = PublicActivity::Activity.order("created_at desc").where(owner_id: current_user.following_ids, owner_type: "User")
  end
end
Run Code Online (Sandbox Code Playgroud)

为了简便起见我将只包括_create(也有updatedestroy).每次用户提交评估时,它都会在Feed上弹出,我们怎样才能public_valuations显示?

public_activity /评估/ _create.html.erb

<% if activity.trackable %>
  <%= link_to activity.trackable.name, activity.trackable %></b>
<% else %>
  which has since been removed 
<% end %>
Run Code Online (Sandbox Code Playgroud)

valuation.rb

class Valuation < ActiveRecord::Base
  belongs_to :user
  acts_as_taggable
  validates :name, presence: true
  has_many :comments, as: :commentable
  include PublicActivity::Model
  tracked owner: ->(controller, model) { controller && controller.current_user }

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

  scope :randomize, -> do
      order('RANDOM()').
      take(1)
    end
end
Run Code Online (Sandbox Code Playgroud)

users_controller

 def show
   if
     @valuations = @user.valuations
   else
     @valuations = @user.public_valuations
   end
 end
Run Code Online (Sandbox Code Playgroud)

user.rb

#gets public valutations or nil, if there's no public valutation
def public_valuations
  valuations.find(&:public?)
end
Run Code Online (Sandbox Code Playgroud)

我从railscasts剧集中获得了几乎所有的活动代码:http://railscasts.com/episodes/406-public-activity .

这就是我们如何为配置文件进行私有提交工作: 如何使用私有提交来隐藏配置文件?

非常感谢您的参与!

UPDATE

由于我们无法通过public_activity gem解决问题,因此我从头开始创建公共活动,并尝试在此处解决此问题: 如何进行私人活动?

小智 2

尝试失败

根据 Avdept 的建议:

class ActivitiesController < ApplicationController
    def index
      @activities = PublicActivity::Activity.not_private.order("created_at desc").where(owner_id: current_user.following_ids, owner_type: "User")
    end
end
Run Code Online (Sandbox Code Playgroud)

估值.rb

def public? !private end => def public?; !private; end;
scope :not_private, -> { where(private: false) }
Run Code Online (Sandbox Code Playgroud)

这给出:

SyntaxError in ActivitiesController#index (for line: def public? !private end => def public?; !private; end;)
/Users/galli01anthony/Desktop/Pecoce/app/models/valuation.rb:9: syntax error, unexpected '!', expecting ';' or '\n' def public? !private end => def public?; !private; end; ^ /Users/galli01anthony/Desktop/Pecoce/app/models/valuation.rb:9: syntax error, unexpected =>, expecting end-of-input def public? !private end => def public?; !private; end; ^
Run Code Online (Sandbox Code Playgroud)