我设置Devise
以允许email only
注册过程,该过程通过设置密码发送带有确认帐户链接的电子邮件。
我想在密码设置(和帐户确认)的同时设置firstname
和lastname
,但我不知道该怎么做。
这是我的确认控制器(工作),Crafter是我的标准用户。
我试了Crafter.update_attributes(params[:crafter])
没有运气。
任何帮助都会很精彩。 TY。
def update
with_unconfirmed_confirmable do
if @confirmable.has_no_password?
@confirmable.attempt_set_password(params[:crafter])
if @confirmable.valid?
@confirmable.update_attributes(params[:crafter])
do_confirm
else
do_show
@confirmable.errors.clear #so that we wont render :new
end
else
self.class.add_error_on(self, :email, :password_allready_set)
end
end
if !@confirmable.errors.empty?
render 'devise/confirmations/new' #Change this if you don't have the views on default path
end
end
def do_show
@confirmation_token = params[:confirmation_token]
@requires_password = true
self.resource = @confirmable
render 'devise/confirmations/show' #Change this if you don't have the views on default path
end
def do_confirm
@confirmable.confirm!
set_flash_message :notice, :confirmed
sign_in_and_redirect(resource_name, @confirmable)
end
我的“确认帐户”表格:
<%= form_for resource, :as => resource_name, :url => update_user_confirmation_path, :html => {:method => 'patch', class: "form-horizontal", role: "form"}, :id => 'activation-form' do |f| %>
<%= f.text_field :firstname, autofocus: true, placeholder: "Firstname", class: "form-control" %>
<%= f.text_field :lastname, placeholder: "Lastname", class: "form-control" %>
<% if @requires_password %>
<%= f.password_field :password, autofocus: true, placeholder: "Choose A Password", class: "form-control" %>
<%= f.password_field :password_confirmation, placeholder: "Confirm Password", class: "form-control" %>
<% end %>
<%= hidden_field_tag :confirmation_token,@confirmation_token %>
答案 0 :(得分:0)
很难说,但我猜你没有把firstname
,lastname
参数传递给控制器。
Rails 4使用名为strong parameters的东西;如果你想超越下面的例子,README那里有很多好的信息。
在ApplicationController中,您需要允许其他参数,添加以下行:
应用程序/控制器/ application_controller.rb
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:firstname, :lastname, :email, :current_password, :password, :password_confirmation)
end
end
那应该解决问题 在CrafterController中你可以这样做:
@confirmable.update_with_password(account_update_params)
只是做得更清洁