0

私は Rails 4 と Devise 3.0.0 を使用しており、これらの新しい強力なパラメーターを使用するのは初めてです。移行を使用してユーザー モデルに first_name と last_name を追加し、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 の両方の行を削除すると、すべて正常に動作します。

同様の問題を抱えた他いくつかの投稿を見てきましたが、役に立ちませんでした。何か案は?

4

1 に答える 1

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" %>
     #^^^^^^^^^^
于 2013-08-21T20:12:17.757 に答える