关系没有按预期工作

时间:2015-08-23 23:45:23

标签: ruby-on-rails associations

对于大多数人来说,这将是相当快速和简单的...我有一个名为types的表,另一个名为projects。项目只能有一种类型,但类型可以有很多项目。例如,社区花园项目和游乐场项目都可以具有“绿色空间”类型。所以我建立了一个has_many协会。在我的类型模型中,我有这个:

has_many :projects

在我的项目模型中,我没有任何东西(我之前有has_one但是在查看文档时似乎不正确)。在项目#show view中我想要显示的类型的名称。公园项目的观点应该说是“绿色空间”。但我收到了错误

undefined method `type' for #<Project:0x007ffdd14fcde8>

我正尝试使用以下方式访问该名称:

<h3>Type: <%= @project.type.project_type %> </h3>

我也尝试过:

<h3>Type: <%= @project.type_id.project_type %> </h3>

但当然type_id会给出一个数字,而且数字没有project_typeproject_type是保存字符串数据&lt;绿色空间&#39;的列的名称。我错了吗?或者我的设置不正确?

同样在我的架构中,项目如下所示:

create_table "projects", force: :cascade do |t|
  t.string   "type_id"
  t.text     "description"
  t.integer  "money_needed"
  t.integer  "money_raised"
  t.float    "interest_offered"
  t.datetime "end_date"
  t.integer  "user_id"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.string   "name"
  t.text     "url"
end

2 个答案:

答案 0 :(得分:1)

项目可以属于两者。喜欢这个

#app/models/project.rb
class Project < ActiveRecord::Base
  belongs_to :type
  belongs_to :user
  #...
end

#app/models/user.rb
class User < ActiveRecord::Base
  has_many :projects
  #...
end

#app/models/type.rb
class Type < ActiveRecord::Base
  has_many :projects
  #...
end

答案 1 :(得分:0)

在项目模型中,您应该说明:

belongs_to => :type

一般来说,对于大多数协会来说,会有一个逆转。并非总是如此,因为您可能在Type for Project中有多个关联。例如,除了当前的has_many:projects之外,您可能还有其他人只返回未完成的项目,并且这种关联不需要反转。

请记住,当你声明:@project.type Rails将在@project上寻找一个方法。该关联是提供此方法的,并且实际上结果是Project引用的Type对象。重要的是要认识到@project.type只返回一个类型,因为关联告诉它 - 魔法并不仅仅是推断那就是想要的东西。