2013-09-26 50 views
0

我跟隨Railscast #393將訪客用戶實現到我的應用程序中。這種方法唯一的問題是,它需要用戶仍然點擊一個按鈕來創建用戶(儘管不需要註冊)。我的目標是自動發生這種情況,但每次頁面重新加載或再次訪問時都不會發生。我對如何解決這個問題感到不知所措。使用導軌自動創建訪客用戶

user_controller.rb

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 

    def create 
    @user = params[:user] ? User.new(params[:user]) : User.new_guest 
    if @user.save 
     current_user.move_to(@user) if current_user && current_user.guest? 
     session[:user_id] = @user.id 
     redirect_to root_url 
    else 
     render "new" 
    end 
    end 
end 

user.rb

class User < ActiveRecord::Base 
    attr_accessible :name, :provider, :uid, :email 

    has_many :posts, :dependent => :destroy 
    has_many :comments, :dependent => :destroy 

    def self.new_guest 
     new { |u| u.guest = true } 
    end 
    def move_to(user) 
     posts.update_all(user_id: user.id) 
     comments.update_all(user_id: user.id) 
    end 
end 

application.html.erb

<ul> 
    <li><%= button_to "Try it for free!", users_path, method: :post %></li> 
</ul> 

我可以提供幫助回答這個問題,有必要的任何其他信息。

回答

2

你可能處理這個在before_filter,但你要考慮你會創建一個新的guest用戶任何時間,任何人或任何東西(谷歌機器人,例如)從您的網站請求一個頁面,而不現有的會話。需要某種用戶操作來啓動它可能是一件好事。話雖這麼說,如果你真的想這樣做,你可以做這樣的事情在你的ApplicationController

before_filter :create_guest_if_needed 
def create_guest_if_needed 
    return if session[:user_id] # already logged in, don't need to create another one 
    @user = User.new_guest 
    @user.save 
    session[:user_id] = @user.id 
    # do anything else you need here... 
end 
+0

該做的工作。我把它作爲之前的過濾器,併爲我的'posts_controller.rb'創建方法。像魅力一樣工作,非常感謝! – anater