【问题标题】:rails has one association problemsrails 有一个关联问题
【发布时间】:2012-11-27 21:38:43
【问题描述】:

我有模型生产者、公司和用户

我希望一个生产者和一个公司都有一个用户。属于某公司的用户只属于该公司。属于某个产品的用户只属于该产品。

所以我想要这样的桌子

productor           company                user
---------           --------               ------
id                  id                     id
name                name                   email
user_id             user_id                password

我尝试使用 has_one 关联执行此操作,但出现此错误

no such column: users.produtor_id: SELECT  "users".* FROM "users"  WHERE "users"."produtor_id" = 1 LIMIT 1

我的模型如下

class Produtor < ActiveRecord::Base

  attr_accessible :borndate, :cpf_cnpj, :is_company, :name, :rg
  has_one :user
  ...


class User < ActiveRecord::Base
  attr_accessible :email, :password
  ...
end

【问题讨论】:

  • 那是源代码的实际副本吗?因为您的“Productor”拼写错误。可能是问题的一部分。
  • 这不是问题.. 因为我是巴西人,所以把问题转述给你理解

标签: ruby-on-rails ruby associations has-one


【解决方案1】:

我认为你把 has_one 和 belongs_to 搞混了。

看看是属于还是has_one关联here

您拥有的列:

class Productor < ActiveRecord::Base
  belongs_to :user, :inverse_of => :productor
end

class Company < ActiveRecord::Base
  belongs_to :user, :inverse_of => :company
end

class User < ActiveRecord::Base
  has_one :productor, :inverse_of => :user
  has_one :company, :inverse_of => :user
end

【讨论】:

  • 我需要手动创建 :productor_id 和 :company_id 列还是由 rails 为我创建?
  • 另一件事.. Productor 有一个 User 而不是相反的.. has_one 应该在 Productor 吗??
  • has_one 和belongs_to 都表达了1 对1 的关系,区别在于foreign_key 的声明位置。您的表在生产者和公司上有 user_id,因此您可以像我展示的那样声明模型。要强制用户只有一个产品或一个公司,需要一些自定义验证。
  • 但是如果我按照你的方式这样做,我将在 Users 表中拥有 productor_id 和 company_id .. 我不想要这种方式.. 我该怎么办?
  • 我想要 Productors 和 Companys 表中的 user_id
【解决方案2】:

您是否在您的用户模型中建立了关联?

class User < ActiveRecord::Base
  attr_accessible :email, :password
  belongs_to :productor
  ...
 end

【讨论】:

  • 请阅读问题!如果我这样做,表用户将拥有 productor_id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多