Ruby on rails RubyonRails活动记录模型在需要时不保存到数据库

Ruby on rails RubyonRails活动记录模型在需要时不保存到数据库,ruby-on-rails,database,activerecord,Ruby On Rails,Database,Activerecord,我正在为一个网站创建注册逻辑,并使用表单从注册页面获取所有数据。我知道数据正在输入,因为我能够对控制器中的输入进行基本数据过滤。下面是ruby显示的数据 {"utf8"=>"✓", "authenticity_token"=>"NOT SHOWN", "email"=>"asdf@", "password"=>"[FILTERED]", "confirmed_password"=>"[FILTERED]", "account_type"=>"sele

我正在为一个网站创建注册逻辑,并使用表单从注册页面获取所有数据。我知道数据正在输入,因为我能够对控制器中的输入进行基本数据过滤。下面是ruby显示的数据

{"utf8"=>"✓",
 "authenticity_token"=>"NOT SHOWN",
 "email"=>"asdf@",
 "password"=>"[FILTERED]",
 "confirmed_password"=>"[FILTERED]",
 "account_type"=>"selection1",
 "submit"=>"Sign Up"}
数据输入后,我在控制器中执行基本数据检查,如下所示

if params[:email].present? && params[:password].present? && 
  params[:confirmed_password].present?
  #check matching passwords and valid email syntax

  if params[:email].include?('@') && params[:password] == params[:confirmed_password]                      && (params[:account_type] == 'tenant' || params[:account_type] == 'pm')
    #passwords match so account can be created

    @newuser = User.new
    @newuser.user_username = params[:email]
    @newuser.user_hash = params[:email]
    @newuser.user_last_update = Time.now
    @newuser.save          <PROBLEM HAPPENS HERE>

    @newemail = Email.new
    @newemail.email_address = params[:email]
    @newemail.email_parent_id = @newuser.user_id
  else
    #passwords do not match
    flash[:notice] = "PASSWORDS DO NOT MATCH"
  end  
else
  #if any of the fields are empty
  flash[:notice] = "FORM MISSING INPUT"
end
我已设置其中四列不能为null。用户哈希、用户id、用户用户名和上次更新的用户。让我感到困惑的是,我在控制器中设置了所有不能为null的值,但当我保存它们时,实际上并没有设置这些值。它们都是空的,它只是告诉我它们不能是空的

那么,我是否没有正确地在表中创建新行或类似的内容。我对RubyonRails还相当陌生,所以我被难住了

差点忘了,这是供用户使用的模型。我不确定我是否需要在这里定义更多,以使一切正常工作

class User < ActiveRecord::Base
# attr_accessible :title, :body
attr_accessor :user_id, :user_username, :user_last_update, :user_hash
end
以下是user_params方法的代码

def user_params
params.require(:newuser).permit(:user_username, :user_hash, :user_last_update)
end
下面是抛出的确切错误

 TypeError in LoginController#signup

can't convert Symbol into String

Rails.root: /home/rezze-dev/Desktop/Rezze
Application Trace | Framework Trace | Full Trace

app/controllers/login_controller.rb:57:in `user_params'
app/controllers/login_controller.rb:27:in `signup'

This error occurred while loading the following files:
newuser

第57行是user_params中的params.require行您的问题在这里:
值(NULL,NULL,NULL,NULL,NULL,NULL)

您的模型实际上没有传递任何数据


白名单

我认为问题在于如何构造
ActiveRecord
对象:

@newuser = User.new(user_params) #-> you'll need to whitelist the params

....

private

def user_params
    params.require(:user).permit(:email, :password, :confirmed_password, :account_type, :user_username, :user_hash, :user_last_update)
end
更具体地说,Rails用于将
模型的特定参数列入白名单。如果您不将希望传递的各种属性列为白名单,它将不允许它们通过。我相信这就是这里发生的事情

修改我上面的代码应该对你有用-如果你留下评论,我随时可以为你服务


更新

这样做:

#app/models/user.rb
Class User < ActiveRecord::Base
   # -> notice nothing here. No need for attr_accessor
end

#app/controllers/users_controller.rb
Class UsersController < ApplicationController
   def some_method
       ... #-> some code
       @user = User.new(user_params)
   end

   private

   def user_params
       parmas.require(:user).permit(:email, :password, :confirmed_password, :account_type, :user_username, :user_hash, :user_last_update)
   end
end 
#app/models/user.rb
类用户这里什么都没注意到。不需要属性访问器
结束
#app/controllers/users\u controller.rb
类UsersController 一些代码
@user=user.new(用户参数)
结束
私有的
def用户参数
parmas.require(:user).permit(:email,:password,:confirmed\u password,:account\u type,:user\u username,:user\u hash,:user\u last\u update)
结束
结束

如果您注释掉用户模型中的
attr\u访问器
,该怎么办?如果您在这个模型后面有一个数据库表,那么就不需要这样做。刚才看到您的编辑-注释掉您的attr_访问器-您只需要在您想要声明虚拟属性(即它们不在您的数据库中)时才需要这样做。我不确定我将如何确切地使用它。因为我只想填写4个字段,其他所有内容将在用户创建帐户并注册后填写。这不是强制输入所有内容的代码吗?不,这意味着您可以传递所需的参数。仅仅因为你允许他们,并不意味着你必须分配他们。我在上面的帖子底部快速更新了我尝试过的内容。我再次更新了帖子,使其格式比评论更好。一切都在底部。我不知道为什么它不能正确地转换它。我假设我的语法是关闭的,但我不知道在哪里。
@newuser = User.new(user_params) #-> you'll need to whitelist the params

....

private

def user_params
    params.require(:user).permit(:email, :password, :confirmed_password, :account_type, :user_username, :user_hash, :user_last_update)
end
#app/models/user.rb
Class User < ActiveRecord::Base
   # -> notice nothing here. No need for attr_accessor
end

#app/controllers/users_controller.rb
Class UsersController < ApplicationController
   def some_method
       ... #-> some code
       @user = User.new(user_params)
   end

   private

   def user_params
       parmas.require(:user).permit(:email, :password, :confirmed_password, :account_type, :user_username, :user_hash, :user_last_update)
   end
end