Rails 4.0 + Devise 3.0.0自定义属性到用户模型
问题描述:
我正在使用Rails 4和Devise 3.0.0,并且使用这些新的强参数是新的。我使用迁移为用户模型添加了first_name和last_name,然后将以下内容添加到基于Devise Wiki的我的application_controller.rb中。Rails 4.0 + Devise 3.0.0自定义属性到用户模型
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
before_filter :configure_permitted_parameters, if: :devise_controller?
protect_from_forgery with: :exception
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) }
end
end
我sign_up视图(/views/devise/registrations/new.html.erb)被吹了此错误消息:
undefined method `first_name' for #<ActionView::Helpers::FormBuilder:0x007fdcbcbe2170>
这里是我的完整视图:
<div class="container">
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<h2 class="form-signin-heading">Sign up</h2>
<%= f.first_name :first_name, :autofocus => true, :placeholder => 'Fist name', :class => "form-control" %>
<%= f.last_name :last_name, :placeholder => 'List name', :class => "form-control" %>
<%= f.email_field :email, :placeholder => 'Email address', :class=> "form-control" %>
<%= f.password_field :password, :placeholder=> 'Password', :class=> "form-control" %>
<%= f.password_field :password_confirmation, :placeholder=> 'Password confirmation', :class=> "form-control" %>
<%= f.submit "Sign up", :class => 'btn btn-lg btn-primary btn-block' %>
<div class="shared_links"><%= render "devise/shared/links" %></div>
<% end %>
</div>
如果我从注册#new form中删除了两个:first_name和:last_name行,那么一切正常。
答
我想你想用f.text_field
:
# This:
<%= f.first_name :first_name, :autofocus => true, :placeholder => 'Fist name', :class => "form-control" %>
<%= f.last_name :last_name, :placeholder => 'List name', :class => "form-control" %>
# Should become:
<%= f.text_field :first_name, :autofocus => true, :placeholder => 'Fist name', :class => "form-control" %>
#^^^^^^^^^^
<%= f.text_field :last_name, :placeholder => 'List name', :class => "form-control" %>
#^^^^^^^^^^
我想你想用'f.text_field:first_name'和'f.text_field:last_name'与常规选项 – MrYoshiji
@MrYoshiji而你对...人,谈论不看大局,专注于小问题。发布一个答案,我会接受它。 –
没关系,一天结束的时候,在蒙特利尔也是一个温暖的一天......我明白;) – MrYoshiji