1

私はgetstreamを使用しており、フォロワーとして機能して、プロジェクトの通知とニュース フィードを作成しています。特定のユーザーをフォローすると、そのユーザーはそのようなフォローの通知を受け取ることになっています。ユーザーのフォローとフォロー解除はできますが、getstream で次のエラーが発生します。

Something went wrong creating an activity: undefined local variable or method `user' for #<Follow:0x007ffaa70c9398>
Completed 500 Internal Server Error in 37ms

NameError (undefined local variable or method `user' for #<Follow:0x007ffaa70c9398>):
app/controllers/users_controller.rb:160:in `follow_user'


Rendered /usr/local/lib/ruby/gems/2.2.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (3.1ms)
Rendered /usr/local/lib/ruby/gems/2.2.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_trace.text.erb (0.8ms)
Rendered /usr/local/lib/ruby/gems/2.2.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.text.erb (0.9ms)
Rendered /usr/local/lib/ruby/gems/2.2.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb (108.1ms)

これは、私のfollow.rbファイルが次のようになっている場合:

class Follow < ActiveRecord::Base

  extend ActsAsFollower::FollowerLib
  extend ActsAsFollower::FollowScopes

  # NOTE: Follows belong to the "followable" interface, and also to followers
  belongs_to :followable, :polymorphic => true
  belongs_to :follower,   :polymorphic => true


  include StreamRails::Activity
  as_activity

  def activity_notify
    [StreamRails.feed_manager.get_notification_feed(self.followable_id)]
  end

  def activity_object
    self.followable
  end

  def block!
    self.update_attribute(:blocked, true)
  end

end

そしてuser.rb私は持っています:

acts_as_followable
acts_as_follower

Followモデルを参照するものは他にありません。私が間違っていることは何ですか?

編集:

これは、ユーザーコントローラーのフォローおよびフォロー解除コードです。160 行目はif @follower.follow(@following)であり、フォローを解除する場合も同様です。

def follow_user
  @follower = User.find_by_username(params[:username])
  @following = User.where(id: params[:following_id]).first
  @user = @following

  if @follower == @following
    respond_to do |format|
      flash.now[:warning] = "Cannot follow yourself."
      format.js {  render file: "/app/views/layouts/notice.js.erb" }
    end
  end

  if @follower.follow(@following)
    StreamRails.feed_manager.follow_user(@follower.id, @following.id)
    respond_to do |format|
      format.js { render file: "/app/views/users/follow.js.erb" }
    end
  else
    respond_to do |format|
      flash.now[:info] = "Error."
      format.js {  render file: "/app/views/layouts/notice.js.erb" }
    end
  end
end

def unfollow_user
  @follower = User.find_by_username(params[:username])
  @following = User.find(params[:following_id])
  @user = @following

  if @follower.stop_following(@following)  
    StreamRails.feed_manager.unfollow_user(@follower.id, @following.id)
    respond_to do |format|
      format.js { render file: "/app/views/users/follow.js.erb" }
    end
  else
    respond_to do |format|
      flash.now[:info] = "Error."
      format.js { render file: "/app/views/users/add_flag.js.erb" }
    end
  end
end
4

1 に答える 1

0

stream-rails gem は、モデルuserにアクティビティのアクターを検索するための属性があることを前提としています。activity_actorモデルにメソッドを実装することで、この動作を変更できますFollow

例えば:

class Follow < ActiveRecord::Base

    def activity_actor
        self.follower
    end

end

これにより、フォロー モデルが作成されるときに「x フォロー y」などのアクティビティが作成されます (フィード間の実際のフォロー接続を作成するために既に実装したロジックも同様です)。

于 2016-04-26T19:57:52.640 に答える