关系未按预期工作
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
这对你们大多数人来说都相当快速和容易...我有一个 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