对于大多数人来说,这将是相当快速和简单的...我有一个名为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_type
。 project_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
答案 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只返回一个类型,因为关联告诉它 - 魔法并不仅仅是推断那就是想要的东西。