使用Rails自动创建访客用户

时间:2013-09-26 21:51:52

标签: ruby-on-rails authentication erb rails-activerecord

我跟着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>

我可以提供帮助回答这个问题所需的任何其他信息。

1 个答案:

答案 0 :(得分:2)

你可以在before_filter中处理这个问题,但是你想要考虑在任何人或任何事情(例如谷歌机器人)请求一个页面的时候你创建一个新的访客用户您的网站没有现有会话。需要某种用户操作来启动它可能是一件好事。话虽如此,如果你真的想这样做,你可以在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