关系未按预期工作

Relations not working as expected

这对你们大多数人来说都相当快速和容易...我有一个 table 叫 types,另一个叫 projects。一个项目只能有一个类型,但一个类型可以有多个项目。例如,社区花园项目和游乐场项目都可以具有 'greenspace' 类型。所以我成立了一个has_many协会。在我的类型模型中,我有这个:

has_many :projects

并且在我的项目模型中我没有任何东西(我以前有 has_one 但在查看文档时它似乎不正确)。在 projects#show 视图中,我希望显示类型的名称。 parks 项目的视图应该显示 'greenspace'。但我收到错误

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

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

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

我也试过:

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

不过当然type_id给个数,没有project_type给个数。 project_type 是保存字符串数据的列的名称 'greenspace'。我是不是访问错了?还是我设置不正确?

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

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

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

belongs_to => :type

一般来说,对于大多数协会来说,都会有相反的情况。并非总是如此,因为您可能在 Type for Project 中有多个关联。例如,除了您当前的 has_many :projects,您可能还有其他 return 未完成的项目,这样的关联不需要逆向关联。

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

项目可以belong_to两者。像这样

#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