【问题标题】:Rails 4.0 + Devise 3.0.0 custom attributes to User modelRails 4.0 + 为用户模型设计 3.0.0 自定义属性
【发布时间】:2013-08-21 20:00:10
【问题描述】:

我正在使用 Rails 4 和 Devise 3.0.0,并且不熟悉使用这些新的强大参数。我使用迁移将 first_name 和 last_name 添加到 User 模型中,然后根据 Devise Wiki 将以下内容添加到我的 application_controller.rb 中。

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

我的注册视图 (/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>

如果我从 registration#new 表单中删除 :first_name 和 :last_name 行,一切正常。

我查看了a 几个other 有类似问题的帖子,但无济于事。有什么想法吗?

【问题讨论】:

  • 我认为您的意思是将 f.text_field :first_namef.text_field :last_name 与常规选项一起使用
  • @MrYoshiji 你是对的......伙计,谈论不看大局而专注于小问题。发布答案,我会接受。
  • 没关系,一天结束,蒙特利尔这里也是温暖的一天……我明白;)
  • 一位蒙特利尔人,很高兴认识你。我欠你一杯啤酒!
  • 对不起,我以为我在你发布后就接受了。我的错!

标签: ruby-on-rails devise


【解决方案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" %>
     #^^^^^^^^^^

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 2016-08-13
    • 1970-01-01
    相关资源
    最近更新 更多