列表中的用户模型 Rails - 如何到达?

User Model with Listings Rails - How to reach?

我有一个船型及其型号,例如品牌、型号和年份。我也有用户模型,我想通过向 boat_id 的用户模型添加迁移来连接它们,并且我向用户模型添加了 belongs_to :boathas_many :boats。但是我无法从控制台到达 User.first.boat.name,即使我能够到达 Boat.first.brand.name

当我尝试时 User.first.boat.name。控制台给出错误提示;

NoMethodError: undefined method `boat' for #<User:0x0000000665dc30>

顺便说一句:船模型包括 model_id brand_idyear_id

编辑1: 或者我应该删除 Boat 模型并直接将 model_id brand_idyear_id 添加到 User 模型。

编辑2: 我希望能够达到 User.first.boat.brand.name 或 User.first.boat.year.nameor User.first.boat.model.name

编辑3: 每艘船都有一个品牌、年份和型号。但是用户可以有很多船

编辑4: 我要做的是; 用户可以注册并登录 然后用户按 link 列出我的船。 He/she 保存船然后页面呈现到用户配置文件 在用户配置文件中,我不知道如何获取当前用户船名年份等。这就是我感到困惑的原因。抱歉造成误会

运行rails generate migration,然后填写change方法如下:

def change
  add_column :boats, :user_id, :integer
end

然后 运行 rake db:migrate.

您的用户模型是 has_many 艘船,因此您需要船 table 来引用用户。可能值得阅读 ActiveRecord 关联的 Rails 指南,以更好地了解其工作原理:http://guides.rubyonrails.org/association_basics.html#the-has-many-association

我认为您对 Rails 关联如何与它们在数据库中的存储方式相结合感到困惑。如果一个User可以有很多条船,那么外键需要放在boatstable上。目前您在用户 table 中有 boat_id,这应该被删除,并且需要根据 Matt 的回答将 user_id 列添加到船 table 中。

Reference

要实现您的目标,您需要按以下方式设置模型:

class User
  has_many :boats
  ...
end

class Boat
  belongs_to :user # table has a user_id column
  ...
end

然后您可以使用 user.boats.first.brand.name

访问船的品牌