2010-11-30 33 views
5

Xin chào, tôi đang tìm cách thêm chiến lược lời mời vào ứng dụng Rails của mình. Tôi đang sử dụng Devise để xác thực, và giống như giao diện của devise_invitable, nhưng theo như tôi có thể nói, đá quý đó chỉ cho phép bạn mời người dùng mới vào hệ thống.Gửi thư mời dự án trong Rails

Trong ứng dụng của tôi, người dùng có khả năng mời người dùng khác (sử dụng email) tham gia dự án hiện tại của mình. Nếu địa chỉ email đó tồn tại, người dùng sẽ được thêm vào; nếu địa chỉ không tồn tại, tôi muốn gửi lời mời theo dự án cụ thể đến địa chỉ email đó. Nếu người dùng đã có tài khoản, cô ấy có thể đăng nhập và liên kết tài khoản của mình với dự án đó. Nếu không, cô ấy có thể tạo một tài khoản mới.

Có ai có lời khuyên nào về nơi tìm kiếm hệ thống như vậy không?

Trả lời

9
# app/models/invite.rb 
class Invitation < ActiveRecord::Base 
    validates_uniqueness_of :email, :scope => :project_id 
    belongs_to :project 
    has_many :users 
    after_save :email_invite_if_no_user 

    private 
    def email_invite_if_no_user 
     unless User.find_by_email(email) 
     UserMailer.send_invite(self).deliver 
     end 
    end 
end 

# config/routes.rb 
resources :projects do 
    resources :invites 
end 

# app/controllers/invites_controller.rb 
class InvitesController < ActionController 
    before_filter :get_project 

    def new 
    # render invite form 
    end 

    def create 
    @invite = Invite.new(params[:invite]) 
    @invite.project_id = @project.id 
    if @invite.save 
     flash[:message] = "Successfully invited #{params[:invite][:email]}" 
     redirect_to @project 
    else 
     flash[:error] = "Could not invite #{params[:invite][:email]}" 
     render :new 
    end 
    end 

    private 
    def get_project 
     @project = Project.find(params[:project_id]) 
    end 
end 
+0

Chắc chắn là điểm khởi đầu tốt? Bạn sẽ xử lý phần chấp nhận lời mời như thế nào? Kiểm tra xem có lời mời nào có cùng email trên mỗi lần đăng nhập không? hoặc mỗi lần làm mới trang? – pastullo

+0

@pastullo Tôi có thể sẽ tạo phương thức 'InvitationsController # accept' để cho phép current_user (nếu lời mời tồn tại và so khớp email) truy cập dự án, tuy nhiên ứng dụng của bạn muốn xử lý điều đó (mục nhập bảng user_projects?). – Unixmonkey

+0

làm thế nào về: inviteController # mời kiểm tra nếu người dùng đã được đăng ký. Nếu anh ta là, nó tạo ra một thành viên để liên kết người dùng và nhóm. Nếu anh ấy chưa đăng ký, nó sẽ để lại lời mời với email của anh ấy và nhóm đang chờ xử lý. Khi email đó đăng ký, với bộ lọc after_create, bạn tạo thành viên? – pastullo

0

Tôi đã triển khai chức năng trên dòng tương tự trong ứng dụng của mình. Trong ứng dụng của tôi, chúng tôi có chức năng theo dõi không theo dõi và người dùng có thể mời địa chỉ liên hệ của anh ấy từ gmail, yahoo và facebook và bằng cách nhập email vào vùng văn bản.

Nếu Email hợp lệ - không có hộp kiểm để gửi mời (tin nhắn email không hợp lệ trước email)
Nếu email hợp lệ và không có người dùng đã đăng ký sử dụng mà - show hộp kiểm để mời
Nếu email hợp lệ và đăng ký sử dụng - show theo dõi nút hủy theo dõi

Tôi đã sử dụng đá quý địa chỉ liên hệ để tìm nạp địa chỉ liên hệ từ gmail và yahoo.

Phần còn lại của mã hóa bạn phải tự mình làm, tôi không nghĩ có bất kỳ đá quý nào có sẵn cho điều đó.

Các vấn đề liên quan