1

首先,我是 Rails 新手,所以我仍然掌握了窍门。

我正在尝试将两个字段添加到设计注册页面,一个名字字段和一个姓氏字段。我已经继续并更改了视图和控制器以尝试此操作。它们看起来像这样:

控制器:

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  before_action :configure_devise_permitted_parameters, if: :devise_controller?

  protected

  def configure_devise_permitted_parameters
    registration_params = [:firstName, :lastName, :email, :password, :password_confirmation]

    if params[:action] == 'update'
      devise_parameter_sanitizer.for(:account_update) { 
        |u| u.permit(registration_params << :current_password)
    }
    elsif params[:action] == 'create'
      devise_parameter_sanitizer.for(:sign_up) { 
        |u| u.permit(registration_params) 
      }
    end
  end
end

看法:

<h2>Sign up</h2>

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div><%= f.label :email %><br />
  <%= f.email_field :email, :autofocus => true %></div>

  <div><%= f.label :password %><br />
  <%= f.password_field :password %></div>

  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></div>

  <div><%= f.label :firstName %><br />
  <%= f.fName_field :firstName %></div>

  <div><%= f.label :lastName %><br />
  <%= f.lName_field :lastName %></div>

  <div><%= f.submit "Sign up" %></div>
<% end %>
<%= render "devise/shared/links" %>

但是,当我查看页面时出现此错误:

undefined method `fName_field' for #<ActionView::Helpers::FormBuilder:0x00000003c89940>

我必须在哪里定义这些方法?还是它们在其他地方自动定义?

谢谢你的帮助。

4

4 回答 4

5

使用“f.something”,您可以在表单中定义字段的类型。尝试类似的东西

<%= f.text_field :lastName %>

这应该有效。

您可以在此处阅读有关可用字段类型的信息:http: //apidock.com/rails/ActionView/Helpers/FormHelper/form_for

于 2013-10-18T17:53:50.193 回答
1

创建这样的迁移以将名字和姓氏添加到用户表:-

class AddFirstnameAndLastnameToUsers < ActiveRecord::Migration
  def change
   add_column :users, :firstName, :string
   add_column :users, :lastName, :string
  end
end

并将其添加到您的视图中:-

     <div><%= f.label :firstName %><br />
          <%= f.text_field :firstName%></div>
     <div><%= f.label :lastName %><br />
          <%= f.text_field :lastName %></div>

你不能做f。到表的列,你在字段的类型上做。

于 2013-10-18T18:10:34.417 回答
0
undefined method `fName_field'

这意味着您的数据库中没有 fName 列


如果您可以访问您的数据库,您会看到 Devise 生成了一个包含一堆列的表。默认情况下,这些列仅包含用户的电子邮件和密码。要添加更多内容,您首先需要将该列添加到数据库中,然后您应该能够使用它来执行您正在执行的操作。

设计上有一个很好的railscast你可以看到如何做到这一点

于 2013-10-18T17:49:00.740 回答
0

我知道这是菜鸟在第一次创建注册表单时犯的一个非常常见的错误,因为该设计放置了f.email_field、f.password_field等所有字段,但这些都是有效的控件,所以开发人员会感到困惑使用_field键入属性用于定义名字
的“ fname_field ”不能用作表单控件。

请验证可在此处使用的所有控件

根据当前情况,您应该选择f.text_field

于 2020-07-25T21:56:15.247 回答