我在gem中使用了devide,现在我制作了注册和登录页面。 当我在我的应用程序中写入我的ID和电子邮件地址时,blowser告诉我1错误禁止此用户被保存:Id不能为空。当然,我肯定写了id,所以我不知道为什么。 这个吹风机错误了吗? 我在home_controller中写道,
class HomeController < ApplicationController
before_filter :find_user, only: [:index]
def index
# @id = params[:id]
# @email = params[:email]
if id == @user.id && email == @user.email
render :text => "sucsess"
else
render :text => "fail"
end
end
def create
id = params[:id]
email = params[:email]
@user = UserData.new(user_params)
@user.save
unless userData.save
@error_message = errors.full_messages.compact
end
end
private
def find_user
user = User.find(params[:id])
if current_user.id != user.id
redirect_to root_path
end
end
end
在users.rb
中
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable
validates :id, presence: true
validates :email, presence: true, uniqueness: true
end
在迁移文件中
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
## Confirmable
# t.string :confirmation_token
# t.datetime :confirmed_at
# t.datetime :confirmation_sent_at
# t.string :unconfirmed_email # Only if using reconfirmable
## Lockable
# t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
t.timestamps null: false
end
add_index :users, :email, unique: true
add_index :users, :reset_password_token, unique: true
# add_index :users, :confirmation_token, unique: true
# add_index :users, :unlock_token, unique: true
end
end
在routes.rb
中
Rails.application.routes.draw do
get 'notes/new'
devise_for :users
root to: "home#index"
get 'home/index'
get 'home/create'
namespace :home, default: {format: :json} do
resources :index, only: :create
end
end
答案 0 :(得分:2)
验证在创建之前运行。因此,在保存之前,....
while(i<n+1){
j <- ifelse(i+1==n+1,1,i+1) # j=i+1 and j=1 for the last iteration
A.area<-0.5*(poly.d[i,2]*poly.d[j,1]-poly.d[j,2]*poly.d[i,1])
A.sum<-A.sum+A.area
C.x<-(poly.d[i,2]+poly.d[j,2])*(poly.d[i,2]*poly.d[j,1]-poly.d[j,2]*poly.d[i,1])
C.xsum<-C.xsum+C.x
C.y<-(poly.d[i,1]+poly.d[j,1])*(poly.d[i,2]*poly.d[j,1]-poly.d[j,2]*poly.d[i,1])
C.ysum<-C.ysum+C.y
i<-i+1
}
C.ysum<-C.ysum/(6*A.sum)
C.xsum<-C.xsum/(6*A.sum)
....
将无法创建。
删除它
id
并且不要在validates :id, presence: true
操作上手动设置id
。
答案 1 :(得分:2)
从模型中删除以下行,因为ID是自动生成的字段。
验证:id,presence:true
在控制器文件中更新创建操作,如下所示,
def create
@user = User.new(user_params)
@user.save
unless @user.save
@error_message = errors.full_messages.compact
end
end
将“UserData”替换为“User”,这是根据您的代码的型号名称。
答案 2 :(得分:0)
评论或删除以下行
validates :id, presence: true
因为id是由rails自动创建的,无需验证它。
和 在您的控制器中,更改私有方法代码:
def find_user
@user = User.find(params[:id]) #replace user to @user
if current_user.id != user.id
redirect_to root_path
end
end