2013-08-21 26 views
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行,那麼一切正常。

我看過a很少other類似問題的帖子無濟於事。有任何想法嗎?

+1

我想你想用'f.text_field:first_name'和'f.text_field:last_name'與常規選項 – MrYoshiji

+0

@MrYoshiji而你對...人,談論不看大局,專注於小問題。發佈一個答案,我會接受它。 –

+0

沒關係,一天結束的時候,在蒙特利爾也是一個溫暖的一天......我明白;) – MrYoshiji

回答

1

我想你想用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" %> 
    #^^^^^^^^^^