Ruby on rails RubyonRails:如何验证id是否存在于其他列中?
我有一个列,它要求用户的id是否存在 我的表格有以下列(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 :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