Ruby on Rails社交化宝石设置

时间:2014-02-04 00:27:24

标签: ruby-on-rails ruby ruby-on-rails-4

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

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

非常感谢一个深思熟虑的答案。

2 个答案:

答案 0 :(得分:13)

我是社会化的作者。这是从我们的应用程序中获取的一些代码。我们有一个SocializationsController处理类似&关注每个型号。这很简单。

# 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

对于提及,例如,您只需解析提及存在的注释,并使用代码手动创建提及。它应该相当简单。

答案 1 :(得分:5)

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

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

config/routes.rb

YourApp::Application.routes.draw do
  resources :users do
    member do
      post :follow
    end
  end
end

这应该会为您提供/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

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

class User < ActiveRecord::Base
  acts_as_follower
  acts_as_followable
end

在您看来,您可以使用方法

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

因此,如果您点击该链接,它会带您进入用户控制器中的跟进操作,并允许当前用户关注该用户

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