Ruby on rails 操作后登录

Ruby on rails 操作后登录,ruby-on-rails,login,Ruby On Rails,Login,我有一个RubyonRails的博客项目 我想允许用户在未登录的情况下留下消息,但在创建消息后,我希望他登录或注册 其想法如下,用户单击“创建消息”,然后填写消息表单,然后单击“保存消息”,如果用户未登录,则重定向到登录/注册表单,在登录后,系统应确定我们有此用户的消息,使用正确的user.id保存消息 我知道这是一种非常标准的技术,如果你知道一些好的模式,我会很高兴的。Desive不允许在身份验证时发送POST参数,因此你需要通过GET发送消息参数,因此在这里,由于应用了过滤器,用户将在单击“

我有一个RubyonRails的博客项目

我想允许用户在未登录的情况下留下消息,但在创建消息后,我希望他登录或注册

其想法如下,用户单击“创建消息”,然后填写消息表单,然后单击“保存消息”,如果用户未登录,则重定向到登录/注册表单,在登录后,系统应确定我们有此用户的消息,使用正确的user.id保存消息


我知道这是一种非常标准的技术,如果你知道一些好的模式,我会很高兴的。

Desive不允许在身份验证时发送
POST
参数,因此你需要通过
GET
发送消息参数,因此在这里,由于应用了过滤器,用户将在单击“保存消息”时重定向到登录页面,这是一个演示

class MessagesController < ApplicationController
  before_filter :authenticate_user!, :except => [:new]

  def new
    @message = Message.new
  end

  def get_message
    @message = Message.new(params[:message])
    @message.save  
  end
end

在创建操作中,应区分1)已知用户和2)未知用户。在第二种情况下,您应该在会话中存储所创建消息的id,然后重定向到登录/注册页面:

session[:message] = @message.id
redirect_to new_user_session_path
下一步是干扰注册控制器的创建操作(用户在重定向后注册)和会话控制器的创建操作(用户在重定向后登录)

在这两个控制器中,您可以添加如下内容

after_filter :assign_pending_message, only: :create

如果你需要更多的细节,请告诉我

点击“创建消息”按钮后,用户将被重定向到注册或注册页面?如果单击“创建消息”后我出错,请纠正我。用户将填写消息表单,但单击“保存消息”后,用户将重定向到登录/注册表单,然后消息将使用user.id保存
after_filter :assign_pending_message, only: :create
def assign_pending_information_request
  # User succesfully created?
  return unless @user.id

  if session[:message] 
    if Message.exists?(id: session[:message])
      message = Message.find(session[:message])

      message.user = @user
      message.save!
    end

    session.delete(:message)
  end
end