Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails:如何验证id是否存在于其他列中?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails RubyonRails:如何验证id是否存在于其他列中?

Ruby on rails RubyonRails:如何验证id是否存在于其他列中?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个列,它要求用户的id是否存在 我的表格有以下列(id是自动生成的) id :integer not null, primary key first_name :string last_name :string email :string sponsor_id :integer created_at :datetime not n

我有一个列,它要求用户的id是否存在 我的表格有以下列(id是自动生成的)

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
表名:用户

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
User.id
列中必须存在
User.id
的每个值。现在,我对
赞助商id
进行了验证:

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
验证:发起人id,数值性:{only_integer:true},存在性: 真的

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
我尝试了这段代码来让赞助商检查这个id是否存在

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           

有人能帮我吗?谢谢

您必须意识到,验证只在保存对象时发生;当您加载一个对象时,您试图调用它们,但这不起作用

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
如果您想自己做这件事,您应该使用

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           

然而,在我看来,你需要一些不同的东西

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
具体来说,我想这意味着每个用户都需要一个
赞助商
,否则他们的会员资格无效

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
为此,我将使用以下方法:

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
#app/models/user.rb
class User < ActiveRecord::Base
   belongs_to :sponsor, class_name: "User"
   validates :sponsor, presence: true
end
#app/models/user.rb
类用户
这意味着每次创建或更新
用户
对象时,它都会查找
赞助商
对象,顺便说一句,这意味着它将检查
赞助商id

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           

另一个要考虑的重要因素是,如果使用A-,则用关联来引用同一模型。这将使您能够将“赞助商”与

用户
模型中的用户关联起来(我认为这是您想要的)。

您必须意识到,验证只在保存对象时发生;当您加载一个对象时,您试图调用它们,但这不起作用

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
如果您想自己做这件事,您应该使用

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           

然而,在我看来,你需要一些不同的东西

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
具体来说,我想这意味着每个用户都需要一个
赞助商
,否则他们的会员资格无效

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
为此,我将使用以下方法:

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
#app/models/user.rb
class User < ActiveRecord::Base
   belongs_to :sponsor, class_name: "User"
   validates :sponsor, presence: true
end
#app/models/user.rb
类用户
这意味着每次创建或更新
用户
对象时,它都会查找
赞助商
对象,顺便说一句,这意味着它将检查
赞助商id

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           

另一个要考虑的重要因素是,如果使用A-,则用关联来引用同一模型。这将使您能够将“赞助商”与

用户
模型中的用户相关联(我认为这是您想要的)。

我可以看到您想要自联接表(同一模型中的关系)。您可以很容易地做到这一点,而无需像下面这样进行验证

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
//Find a user who is going to be sponsor
@sponsoruser = User.find_by(id: someid)

//Find a user who is accepting a sponsor
@user = User.find_by(id: someid)

@user.update_attributes(sponsor_id: @sponsoruser.id) if @sponsoruser.id?

我可以看出您希望自联接表(同一模型中的关系)。您可以很容易地做到这一点,而无需像下面这样进行验证

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
//Find a user who is going to be sponsor
@sponsoruser = User.find_by(id: someid)

//Find a user who is accepting a sponsor
@user = User.find_by(id: someid)

@user.update_attributes(sponsor_id: @sponsoruser.id) if @sponsoruser.id?

据我所知,赞助商id是另一个用户的id。您可以这样做:

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
在用户模型中写入:

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
belongs_to :sponsor, class_name: 'User', foreign_key: :sponsor_id
然后,您可以执行以下操作,而不是通过提供赞助商id来更新或创建用户:

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
User.create(sponsor: User.last #or something #more attributes)

最后一个将失败,如果您没有提供一个有效的用户作为赞助商

据我所知,赞助商id是另一个用户的id。您可以这样做:

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
在用户模型中写入:

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
belongs_to :sponsor, class_name: 'User', foreign_key: :sponsor_id
然后,您可以执行以下操作,而不是通过提供赞助商id来更新或创建用户:

id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string           
User.create(sponsor: User.last #or something #more attributes)

如果您没有提供一个有效的用户作为赞助商,那么最后一个将失败

我无法理解您第一句话的意思。(撇开语法错误不谈,对我来说仍然没有任何意义。)“是否…”不是你可以要求的。你是说id和赞助商id必须有相同的值吗?我无法理解你第一句话的意思。(撇开语法错误不谈,对我来说仍然没有任何意义。)“是否…”不是你可以要求的。你是说id和赞助商id必须有相同的值吗?嘿,这太棒了!当我试过的时候我会给你回复:)嘿,这太棒了!我试过之后会给你回复:)嘿,这就是我想要的。我会尽力回复你的!嘿,我刚试过你的密码。它真的很好用!但是,在我的项目中,“User.first”不需要赞助商id。我如何才能做到这一点?谢谢你能给我更多的上下文吗?什么是
User.first
?其中存储了什么数据?我尝试了您的代码,但有一个问题是我编写了这个单元测试“test”15。赞助商id必须是现有的id“do@user2.shandor\u id=1000 assert\u not@user2.valid?end`它给了我一个错误,user2.valid是有效的,但该id不存在为什么?我的验证工作在赞助商对象上,而不是
赞助商id
。如果您想要
赞助商id
验证,则需要包含一个单独的验证,如
验证:赞助商id\u有效
定义赞助商id\u有效用户。是否存在?赞助商id:赞助商id结束
嘿,这就是我想要的。我会尽力回复你的!嘿,我刚试过你的密码。它真的很好用!但是,在我的项目中,“User.first”不需要赞助商id。我如何才能做到这一点?谢谢你能给我更多的上下文吗?什么是
User.first
?其中存储了什么数据?我尝试了您的代码,但有一个问题是我编写了这个单元测试“test”15。赞助商id必须是现有的id“do@user2.shandor\u id=1000 assert\u not@user2.valid?end`它给了我一个错误,user2.valid是有效的,但该id不存在为什么?我的验证工作在赞助商对象上,而不是
赞助商id
。如果您想要
赞助商id
验证,则需要包含一个单独的验证,如
验证:赞助商id\u有效
定义赞助商id\u有效用户。是否存在?赞助商id:赞助商id结束
id              :integer         not null, primary key
first_name      :string
last_name       :string           
email           :string           
sponsor_id      :integer
created_at      :datetime        not null
updated_at      :datetime        not null
password_digest :string