【问题标题】:ruby name can't be blank error红宝石名称不能为空错误
【发布时间】:2015-05-24 11:28:42
【问题描述】:

这可能是一个重复的问题,但以前的答案对我没有帮助

我在注册页面时遇到“姓名不能为空”、“手机号不能为空”的错误,即使我填写了姓名和手机号

我的 routes.rb 是

Rails.application.routes.draw do
 devise_for :users
 namespace :api do
  resources :users, :defaults => { :format => 'json' }
 end 

我的控制器页面

class RegistrationsController < Devise::RegistrationsController

skip_before_filter :verify_authenticity_token, :if => Proc.new { |c| c.request.format == 'application/json' }
def new
    @user = User.new
end

def create
    params.permit!
    @user = User.new(params[:user])
    @user = User.new
    @user.name = params[:user][:name]
    @user.email = params[:user][:email]
    @user.mobile_no = params[:user][:mobile_no]
    @user.password = params[:user][:password]
    @user.valid?
    if@user.errors.blank?
        @user.save
    else
        render :action => "new"
    end
end

def update
    super
end
end

我的浏览页面是

 <h2>Sign up</h2>
<%= form_for(resource, as: resource_name, url:   registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name, autofocus: true %>
  </div>
  <div class="field">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true %>
  </div>
  <div class="field">
    <%= f.label :mobile_no %><br />
    <%= f.telephone_field :mobile_no, autofocus: true %>
  </div>
  <div class="field">
    <%= f.label :password %>
    <% if @validatable %>
    <em>(<%= @minimum_password_length %> characters minimum)</em>
    <% end %><br />
    <%= f.password_field :password, autocomplete: "off" %>
  </div>


  <div class="actions">
        <%= f.submit "Sign up" %>
      </div>
    <% end %>

    <%= render "devise/shared/links" %>

我的模型是

class User < ActiveRecord::Base
    devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
    def users_params
    params.require(:users).permit(:name, :email, :mobile_no, :password)
    end
    validates :email,:name, :mobile_no :presence =>true
    validates_uniqueness_of :email
 end

我错过了什么,......提前谢谢......

【问题讨论】:

  • 只是一个建议:您可以使用if @user.save 而不是if @user.errors.blank?。当我遇到类似的问题时,我在相应的模型中添加了attribute_accessible。但是,不知道为什么强参数对我也不起作用
  • @fyodorios - 我已经给你答案了。您是否尝试过将字段更改为文本字段?
  • 您的form_for( resource 可能应该是form_for( @user 并删除as: resource_name。它们似乎是剪切 n 粘贴默认值,而其目的是将表单与您实例化的模型联系起来。

标签: ruby-on-rails forms devise


【解决方案1】:

问题在于我的 routes.rb

替换了路线,来自

devise_for :users

到,

devise_for :users, :controllers => {:registrations => "registrations"}

现在,它工作正常,...

感谢大家的回复

【讨论】:

    猜你喜欢
    • 2010-09-08
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2010-11-20
    • 2017-05-26
    相关资源
    最近更新 更多