Ruby on rails 带有Rails列表的用户模型-如何访问?
我有一个船模型和它的模型,如品牌,型号和年份。我还有一个用户模型,我想通过向Ruby on rails 带有Rails列表的用户模型-如何访问?,ruby-on-rails,model,Ruby On Rails,Model,我有一个船模型和它的模型,如品牌,型号和年份。我还有一个用户模型,我想通过向boat\u id的用户模型添加迁移来连接它们,我向用户模型添加了属于:boat和有许多:boat。但我无法从控制台访问User.first.boat.name,即使我可以访问boat.first.brand.name 当我尝试User.first.boat.name时。控制台给出了一个错误语句 NoMethodError: undefined method `boat' for #<User:0x00000006
boat\u id
的用户模型添加迁移来连接它们,我向用户模型添加了属于:boat
和有许多:boat
。但我无法从控制台访问User.first.boat.name
,即使我可以访问boat.first.brand.name
当我尝试User.first.boat.name
时。控制台给出了一个错误语句
NoMethodError: undefined method `boat' for #<User:0x0000000665dc30>
NoMethodError:未定义的“boat”方法#
顺便说一句:船模型包括模型id
品牌id
和年份id
编辑1:
或者我应该删除船模型并直接向用户模型添加model\u id
brand\u id
和year\u id
编辑2:
我希望能够联系到User.first.boat.brand.name
或User.first.boat.year.name或User.first.boat.model.name
编辑3:
每艘船都有一个品牌、年份和型号。但用户可以有很多船
编辑4:
我要做的是;
用户可以注册并登录
然后用户按下链接列表我的船。
他/她保存船,然后页面呈现到用户配置文件
在用户配置文件中,我不知道如何获取当前用户船名、年份等。这就是我感到困惑的原因。很抱歉出现误解运行
rails生成迁移
,然后按如下方式填写change
方法:
def change
add_column :boats, :user_id, :integer
end
然后运行rakedb:migrate
您的用户模型有许多船只,因此需要“船只”表来引用用户。阅读ActiveRecord关联的Rails指南可能有助于更好地了解其工作原理:我认为您对Rails关联如何工作以及它们如何存储在数据库中感到困惑。如果一个用户可以有多条船,则外键需要位于
boats
表中。目前,您在用户表中有boat_id
,应将其删除,并根据Matt的回答将user_id
列添加到boats表中
要实现您想要做的事情,您需要按照以下方式设置模型:
class User
has_many :boats
...
end
class Boat
belongs_to :user # table has a user_id column
...
end
然后,您可以使用
user.boats.first.brand.name
访问船的品牌,谢谢,但我已经在用户模型>user.new=>#
中有了品牌id,这一切都取决于您试图建立的关系。如果您可以将预期结果添加到问题中,即用户是否有多个品牌或一个品牌,那么我们可以为您指出要使用的正确关系。是的,您需要在表中包含用户id。这是假设每个用户都有许多船,但每个船只有一个用户。这是正确的吗?您能发布到目前为止运行的相关模型和迁移吗?在你的问题中,你说品牌、型号和年份是属性,但从你的主机上你正在做的Boat.first.Brand.name
,这让人觉得品牌就是一个型号。很抱歉,错了,是的,它们是单独的型号。请更正,用户模型不能同时具有所属:boat
和多个:boat
,除非您为其中一个提供别名。如果users
表中有boat\u id
,则每个用户只能有一条boat。然而,每艘船可以有许多用户,因此boat.users
是有意义的。这和你想做的相符吗?