Ruby on Rails社交化宝石设置

use*_*981 10 ruby ruby-on-rails ruby-on-rails-4

我浏览了社交化宝石的文档,并没有详细解释如何在我的路由和控制器中设置gem以使跟随和提及功能正常运行.

我想知道是否有人可以告诉我如何在我的路线和控制器中设置这个宝石以使其正常运行.

一个深思熟虑的答案将不胜感激.

Car*_*ier 13

我是社会化的作者.这是从我们的应用程序中获取的一些代码.我们有一个SocializationsController,可以为每个模型处理like和follow.这很简单.

# routes.rb
## snip ##
resources :users do
  post 'follow',   to: 'socializations#follow'
  post 'unfollow', to: 'socializations#unfollow'
end

resources :categories, only: [:index] do
  post 'follow',   to: 'socializations#follow'
  post 'unfollow', to: 'socializations#unfollow'
end
## snip ##

# socializations_controller.rb
class SocializationsController < ApplicationController
  before_filter :load_socializable

  def follow
    current_user.follow!(@socializable)
    render json: { follow: true }
  end

  def unfollow
    current_user.unfollow!(@socializable)
    render json: { follow: false }
  end

private
  def load_socializable
    @socializable =
      case
      when id = params[:comment_id] # Must be before :item_id, since it's nested under it.
        @community.comments.find(id)
      when id = params[:item_id]
        @community.items.find(id)
      when id = params[:user_id]
        User.find(id)
      when id = params[:category_id]
        @community.categories.find_by_id(id)
      else
        raise ArgumentError, "Unsupported socializable model, params: " +
                             params.keys.inspect
      end
    raise ActiveRecord::RecordNotFound unless @socializable
  end  
end
Run Code Online (Sandbox Code Playgroud)

例如,您需要解析提及的注释,并手动创建带代码的提及.它应该相当简单.


use*_*149 5

编辑:查看Carl的解决方案,绝对是DRYer!

查看文档,您应该能够在控制器中实现它并以您想要的任何方式进行路由,所有gem正在做的是在数据库中创建表格以供跟随和提及并在模型中关联它们.但是你可以用一个简单的方法(用户可以跟随另一个用户):

在你的 config/routes.rb

YourApp::Application.routes.draw do
  resources :users do
    member do
      post :follow
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这应该给你一条路/users/:id/followfollow_users_path

在你的 app/controllers/users_controller.rb

class UsersController < ApplicationController
  def follow
    user = User.find(params[:id])
    current_user.follow!(user) # => This assumes you have a variable current_user who is authenticated
  end
end
Run Code Online (Sandbox Code Playgroud)

这假设在你的app/models/user.rb,你有

class User < ActiveRecord::Base
  acts_as_follower
  acts_as_followable
end
Run Code Online (Sandbox Code Playgroud)

在您看来,您可以拥有该方法

link_to('Follow', follow_user_path(user), method: :post) # => Assumes user is the user you want to follow
Run Code Online (Sandbox Code Playgroud)

因此,如果单击该链接,则应该转到用户控制器中的跟随操作,并允许当前用户关注该用户

如果我可能错过了任何错误或错别字,请告诉我.我不确定这是不是你要找的,但我希望这会有所帮助.