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)
例如,您需要解析提及的注释,并手动创建带代码的提及.它应该相当简单.
编辑:查看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/follow和follow_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)
因此,如果单击该链接,则应该转到用户控制器中的跟随操作,并允许当前用户关注该用户
如果我可能错过了任何错误或错别字,请告诉我.我不确定这是不是你要找的,但我希望这会有所帮助.