我正在关注 Michael Martl 的 Ruby on Rails 教程,无论出于何种原因,我都无法从 UI/页面将用户添加到数据库 (sqlite3)。参数传递没有错误,我在服务器日志中看到参数,但数据没有完整地到达数据库:
Started POST "/users" for 192.168.1.100 at 2013-03-05 01:20:39 -0500
Processing by UsersController#create as HTML
Parameters: {"utf8"=>"\u2713", "authenticity_token"=>"7VZ7HobCW9YrVBf/LadINF35c9ZThTYb2vBsA+02180=", "user"=>{"name"=>"smith", "email"=>"smith@dev.com"}, "commit"=>"Create my account"}
(0.1ms) begin transaction
(0.1ms) rollback transaction
Rendered shared/_error_messages.html.erb (4.1ms)
Rendered users/new.html.erb within layouts/application (7.1ms)
Rendered layouts/_shim.html.erb (0.0ms)
Rendered layouts/_header.html.erb (0.7ms)
Rendered layouts/_footer.html.erb (0.8ms)
#<ActiveModel::Errors:0xa8e2934 @base=#<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil>, @messages={:name=>["can't be blank"], :email=>["can't be blank"]}>
Completed 200 OK in 89ms (Views: 77.4ms | ActiveRecord: 0.8ms)
当我从 Rails 控制台将相同的参数传递给数据库时,它工作正常;用户被添加/保存没有问题。数据仅在 UI 中丢失。
这是我的架构信息和用户模型文件:
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# name :string(255)
# email :string(255)
# created_at :datetime not null
# updated_at :datetime not null
#
class User < ActiveRecord::Base
attr_accessible :name, :email
#has_many :microposts
before_save { email.downcase! }
validates :name, presence: true
validates :email, presence: true
end
我的控制器:
class UsersController < ApplicationController
def new
@user = User.new
end
def show
@user = User.find(params[:id])
end
def create
@user = User.new(params[:id])
if @user.save
redirect_to @user
else
render 'new'
Rails.logger.info(@user.errors.inspect)
end
end
end
我一直在盯着这段代码一段时间,任何帮助将不胜感激!