1

我遵循Railscast #393在我的应用程序中实现来宾用户。我在这种方法中遇到的唯一问题是它需要用户仍然单击一个按钮来创建用户(尽管没有注册)。我的目标是让这种情况自动发生,但不会在每次重新加载或再次访问页面时发生。我不知道该怎么做。

用户控制器.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

用户.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

应用程序.html.erb

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

我可以提供任何必要的额外信息来帮助回答这个问题。

4

1 回答 1

4

您可能会在 中处理此问题before_filter,但您需要考虑在任何人或任何事物(例如 Google 机器人)在没有现有会话的情况下从您的站点请求页面时,您将创建一个新的访客用户。需要某种用户操作来启动它可能是一件好事。话虽这么说,如果你真的想这样做,你可以在你的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
于 2013-09-27T02:35:18.053 回答