以下图片来自我网站的主页。我试图鼓励nil
用户从一开始就创建目标。
<%= simple_form_for(Goal.new) do |f| %>
<%= f.text_field :name %>
<%= f.text_field :deadline %>
<%= f.submit %>
<% end %>
点击提交后,nil
用户应成为guest
用户,并且应创建目标:
def create
@goal = current_user.goals.build(goal_params)
if @goal.conceal == true
@goal.save
redirect_to @goal, notice: 'Goal was successfully created'
elsif @goal.guest == true
@goal.save
redirect_to signup_url, notice: 'Sign up to see your goal!'
elsif
@goal.save
track_activity @goal
redirect_to @goal, notice: 'Goal was successfully created'
else
flash.now[:danger] = 'Required Field: "Enter Goal"'
render 'new'
end
end
然后应将guest
用户重定向到注册页面:
<%= form_for(@user) do |f| %>
<%= f.text_field :name %>
<%= f.email_field :email %>
<%= f.password_field :password %>
<%= f.submit %>
<% end %>
登录后,作为guest
用户输入的数据应该已保存并应用于新帐户。
guest
用户应在一周内过期:
LIB /目标/ guests.rake
namespace :guests do
desc "Remove guest accounts more than a week old."
goal :cleanup => :environment do
User.where(guest: :true).where("created_at < ?", 1.week.ago).destroy_all
end
end
user.rb
class User < ActiveRecord::Base
has_many :goals
has_secure_password
def self.new_guest
new { |u| u.guest = true }
end
def move_to(user)
goals.update_all(user_id: user.id)
end
end
迁移
rails g migration add_guest_to_users guest:boolean
user_controller
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
那么我的问题究竟是什么?
我的思路是否正确或是否有另外一种方法可以实现我的目标?
点击提交后如何让nil
用户成为guest
用户?我从post获得了很多灵感,但他的目标与我的目标并不相同。他想让用户免费访问网络应用程序。我只是希望非用户能够提交目标作为注册过程的第一部分。
答案 0 :(得分:2)
您可以保存没有验证的用户
def create
@user = params[:user] ? User.new(params[:user]) : User.new_guest
if @user.save validate: false
....
end
end
这样,当您知道数据不正确时,用户不会返回错误