Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.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 带有Rails列表的用户模型-如何访问?_Ruby On Rails_Model - Fatal编程技术网

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
是有意义的。这和你想做的相符吗?