Ruby on rails rails的作用域按id查找方法

Ruby on rails rails的作用域按id查找方法,ruby-on-rails,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3.2,假设我有一个rails应用程序,它有两种型号Person和House。每个Person对象都有一个House\u id属性 我想在我的Person模型中定义以下方法: def locate_house current_house_id = house.find_by_id(person) end 但是我得到了一个未定义的变量错误,house,我如何确保它在范围内?您正在尝试重写rails中已经内置的内容。使用“属于”关系: class Person < ActiveRecord::B

假设我有一个rails应用程序,它有两种型号
Person
House
。每个
Person
对象都有一个
House\u id
属性

我想在我的
Person
模型中定义以下方法:

def locate_house
  current_house_id = house.find_by_id(person)
end

但是我得到了一个未定义的变量错误,
house
,我如何确保它在范围内?

您正在尝试重写rails中已经内置的内容。使用“属于”关系:

class Person < ActiveRecord::Base
    belongs_to :house
end
获取关联的house。

您的模型--
house
--是一个需要大写的ruby常量

def locate_house
  current_house_id = House.find_by_id(person)
end

House是一个常量,需要一个大写字母,就像其他人所说的,看看Rails关于活动记录模型之间关系的指南。有很多可能的关系,有很多可能是你正在寻找的。因为,在现实中,一个人可以有多个房子。

我真的很困惑你的
定位房子
想做什么。您只需执行
person.house
即可获得关联的房屋…在这种情况下没有模型关联,“person”只有一个“house\u id”属性。然后定义关系。看看我的答案。假设我通过JSON创建Person对象,并且我不使用嵌套模型,所以我唯一要做的就是
house\u id
。如何确保使用正确的房屋?如果您在任何地方填充房屋id,则关系将保持不变。但是在接受来自表单的不可信数据并分配id时要小心。这是一个安全漏洞。(但如果JSON来自可信来源,那么它就不应该是一个问题)@AndrewBarinov刚刚意识到,如果这个人是拥有房屋id的人,那么它应该是属于关系,而不是属于关系)。如果房子里有个人身份证,那么它就是一个有身份证的房子。修复了我的ansewr。@Andrew,即使这是代替定义关联的方法(我无法想象为什么),请注意,您正在将一个完整的对象分配给一个名称以
\u id
结尾的变量。一种容易引起头痛的方式。第二种是“想象”。真的@本的回答将为你省去无数的麻烦。
def locate_house
  current_house_id = House.find_by_id(person)
end