0

我正在尝试使用 devise 和 rails 4 将参数从 user#new 传递给 user#create,但我无法弄清楚。我只想获得@invitation,以便在创建用户后对其进行编辑。

class RegistrationsController < Devise::RegistrationsController

  def new
    @invitation = Invitation.find_by_invite_token(params[:invite_token])
    redirect_to root_url if @invitation.nil
    super 
  end

  def create
    @invitation = Invitation.find_by_invite_token(params[:invite_token])

    # Devise create stuff:
    build_resource(sign_up_params)
    if resource.save
      if resource.active_for_authentication?
        set_flash_message :notice, :signed_up if is_navigational_format?
        respond_with resource, :location => after_sign_up_path_for(resource)
      else
        ...

@invitation 在用户#create 中为零

4

1 回答 1

2

因为#new 使用通过 POST 提交的表单到达 #create,所以您原来的 GET 参数将不再出现在 url 中。如果不做某事,您将无法在#create 中获取令牌参数。

快速修复是在表单中添加一个邀请令牌字段。通过这种方式,您将实例变量转移@invitation#new隐藏字段的值中。当然,您也可以使用可见的输入字段。

#views/devise/registrations/new
<%= form_for(resource..... %>
  <%= f.hidden :invitation_token, value: @invitation_token

然后在#create 中,您在 :user 中获得此参数

def create
  @invitation = Invitation.find_by_invite_token(params[:user][:invite_token])
于 2013-10-17T08:46:10.230 回答