2013-07-20 2 views
0

В настоящее время я разрешаю пользователям следовать друг за другом в моем приложении rails (похоже на твиттер).Как сделать пользователей автоматически Следуйте за администратором Пользователь на регистрации

Я бы с удовольствием, если Новые пользователи, которые подпишитесь на сайт Автоматически следуйте за Администратором.

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

Ниже приведен код, который я использую для создания новых пользователей и позволяет пользователям следить друг за другом. (Я знаю, что это очень широкий вопрос, но .....)

(Может кто-то пожалуйста, укажите мне в правильном направлении, как я могу это начать. Мне нужно создать метод .... в моих моделях или добавить код в контроллер?)

Новое в Rails Пожалуйста, помогите) .. .)

ПОЛЬЗОВАТЕЛИ CONTROLLER

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! методы принимать либо идентификатор или объект, как в

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

вам нужно определить метод 'администратора? 'on User class, который в основном просто проверяет атрибут admin так, что' def admin ?; self.admin; end' –

+0

Но когда вы должны следовать администраторам, имейте в виду, что в будущем вы можете иметь несколько учетных записей администратора, поэтому будьте готовы к тому, чтобы справиться с этим делом! –

+0

Surge, вам нужен способ определить пользователя как администратора и получить всех администраторов. Мой код не нуждается в изменении, но вам нужно выяснить, как ваше приложение хочет. (если будет несколько администраторов, вы бы несколько раз вызывали '@ user.follow! admin_user', вот и все. –

Смежные вопросы