我跟着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>
我可以提供帮助回答这个问题所需的任何其他信息。
答案 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