2013-07-20 46 views
0

目前,我允许用户在我的导轨应用程序(类似于推特)上跟随另一个。如何使用户自动跟踪管理用户注册

如果注册到网站的新用户自动关注管理员用户,我很乐意。

Similar to how MySpace use to automatically make Tom your first friend 

下面是我用它来创建新用户,并允许用户彼此相随。代码(我知道这是一个非常广泛的问题,但.....)

(可有人请指出我正确的方向,我怎么能得到这个开始。我需要创建一个方法....在我的模型或添加代码到控制器?)

新来的Rails请帮忙).. 。:)

个USER控制器

class UsersController < ApplicationController 
    before_filter :admin_user,  only: [:destroy] 

    respond_to :html, :js 

    def new 
    @user = RegularUser.new 
    end 

    def index 
    @users = User.paginate(page: params[:page], :per_page => 100).search(params[:search]) 
    end 

    def destroy 
    User.find_by_username(params[:id]).destroy 
    flash[:success] = "User destroyed." 
    redirect_to users_url 
    end 

    def create 
    @user = RegularUser.new(params[:regular_user]) 
    if @user.save 
     UserMailer.registration_confirmation(@user).deliver 
     UserMailer.welcome_user(@user).deliver 
     sign_in @user 
     flash[:success] = "Welcome to the ClickOnComics!" 
     redirect_to (publishers_path) 
    else 
     render 'new' 
    end 
    end 

    private 

    def admin_user 
     redirect_to(root_path) unless current_user.admin? 
    end 

    def follow_admins 
     admins = User.find_by_admin(true) 
     admins.each do |admin| 
     self.follow!(admin) 
    end 
end 

class RelationshipsController < ApplicationController 
    before_filter :current_user 

    respond_to :html, :js 

def create 
    @user = User.find(params[:relationship][:followed_id]) 
    current_user.follow!(@user) 
    respond_with @user 
end 

    def destroy 
    @user = Relationship.find(params[:id]).followed 
    current_user.unfollow!(@user) 
    respond_with @user 
    end 

end 

模型

class Relationship < ActiveRecord::Base 

    attr_accessible :followed_id 

    belongs_to :follower, class_name: "User" 
    belongs_to :followed, class_name: "User" 

    validates :follower_id, presence: true 
    validates :followed_id, presence: true 
end 

class User < ActiveRecord::Base 
    attr_accessible :name, :email, :password, :password_confirmation 

    has_many :relationships, foreign_key: "follower_id", dependent: :destroy 
    has_many :followed_users, through: :relationships, source: :followed 

    has_many :reverse_relationships, foreign_key: "followed_id", 
           class_name: "Relationship", 
           dependent: :destroy 
    has_many :followers, through: :reverse_relationships, source: :follower 

    after_create :follow_admins 

    def follow_admins 
    admins = User.find_all_by_admin(true) 
     admins.each do |admin| 
     self.follow!(admin) 
    end 
    end 

    def following?(other_user) 
    relationships.find_by_followed_id(other_user.id) 
    end 

    def follow!(other_user) 
    relationships.create!(followed_id: other_user.id) 
    end 

    def unfollow!(other_user) 
    relationships.find_by_followed_id(other_user.id).destroy 
    end 

end 

我用这个教程,以帮助我建立特权管理用户与用户模式

http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users#sec-administrative_users

一个布尔管理属性

SCHEMA

create_table "users", :force => true do |t| 
    t.string "name" 
    t.string "email" 
    t.string "role" 
    t.string "username" 
    t.timestamp "created_at",        :null => false 
    t.timestamp "updated_at",        :null => false 
    t.boolean "admin",     :default => false 
    t.string "password_reset_token" 
    t.timestamp "password_reset_sent_at" 
    end 

我需要创建一个定义user_admin方法?

回答

1

在user.rb添加after_create过滤

after_create :follow_admin! 

def follow_admin! 
    relationships.create!(followed_id: admin_user.id) 
end 
+0

我已经在上面添加了一些代码来解释我如何建立管理员权限。当我将代码添加到user.rb(未定义的局部变量或方法'admin_user')时出现此错误我需要创建一个定义admin_user的方法吗? –

1

create行动sign_in前加

@user.follow! admin_user 

您需要首先获取某种方式管理用户。 好主意是使follow!following?unfollow!方法,以接受ID或对象作为

def follow!(user_or_id) 
    id = (user_or_id.is_a?(User) ? user_or_id.id : user_or_id) 
    relationships.create!(followed_id: id) 
end 
+0

您需要定义方法'管理? '在用户类,这基本上只是检查管理员属性,所以'def管理? self.admin;结束' –

+0

但是,当你的用户跟随管理员记住,在未来的某个时候你可能有多个管理员帐户,所以准备好处理这种情况! –

+0

浪涌,你需要一种方式来识别用户作为管理员,并获得所有管理员。我的代码不需要改变,但你需要弄清楚你的应用程序想要的。 (如果有多个管理员你会打电话给'@ user.follow!admin_user'几次,就是这样。 –