带有Rails的用户模型 - 如何到达?

时间:2015-04-16 13:28:12

标签: ruby-on-rails model

我有一个船模和它的模型,如品牌,型号和年份。我还有用户模型,我希望通过将迁移添加到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

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

EDIT2: 我希望能够访问User.first.boat.brand.name或User.first.boat.year.name or User.first.boat.model.name

EDIT3: 每艘船都有一个品牌,年份和型号。但是用户可以拥有很多船

EDIT4: 我要做的是; 用户可以注册并登录 然后用户按下我的船的链接列表。 他/她保存船只然后页面呈现给用户配置文件 在用户配置文件中,我不知道如何获得当前用户船名年等。这就是我感到困惑的原因。对不起,误会了

2 个答案:

答案 0 :(得分:1)

运行rails generate migration,然后按以下方式填写change方法:

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

然后运行rake db:migrate

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

答案 1 :(得分:1)

我认为你对Rails协会如何与数据库中的存储方式一起工作感到困惑。如果用户可以拥有多个船只,则外键需要位于boats表上。目前,您在users表中有boat_id,这应该被移除,并且根据Matt的回答,需要将user_id列添加到船只表中。

Reference

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

class User
  has_many :boats
  ...
end

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

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

访问船只的品牌