Rails 5.0 Chapter 14 Micheal Hartl Tutorial undefined local variable active_relationship
Rails 5.0 Chapter 14 Micheal Hartl Tutorial undefined local variable active_relationship
基本上我一直在关注 Rails 教程(我遇到了很多问题,但大多数问题都很容易解决)但现在我才刚刚开始这一章,我我 运行 在一个问题中。
这是教程的 link(在 table 14.1 练习 2 之后),由于未定义变量,我目前无法进行练习。
irb(main):035:0> active_relationship.follower \r
NameError: undefined local variable or method `active_relationship' for main:Object
from (irb):35
我不明白我在做什么,但我知道我们正在尝试通过 has_many:
和 belongs_to:
创建的关系,创建关系有效。
irb(main):021:0> user.active_relationships.create!(followed_id: 2)\r
(0.1ms) begin transaction
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
SQL (0.3ms) INSERT INTO "relationships" ("follower_id", "followed_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["follower_id", 1], ["followed_id", 2], ["created_at", 2017-06-27 20:49:11 UTC], ["updated_at", 2017-06-27 20:49:11 UTC]]
(57.3ms) commit transaction
=> #<Relationship id: 1, follower_id: 1, followed_id: 2, created_at: "2017-06-27 20:49:11", updated_at: "2017-06-27 20:49:11">
这是新创建的文件的内容:
app/models/relationship.rb
class Relationship < ApplicationRecord
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
end
app/models/user.rb
class User < ApplicationRecord
has_many :microposts, dependent: :destroy
has_many :active_relationships, class_name: "Relationship",
foreign_key: "follower_id",
dependent: :destroy
.
.
.
问题在这里:我不明白为什么变量 (active_relationship
) 没有定义,但在控制台调用 Relationships.all 时显示如下:
#<ActiveRecord::Relation [#<Relationship id: 1, follower_id: 1, followed_id: 2, created_at: "2017-06-27 20:49:11", updated_at: "2017-06-27 20:49:11">]>
这意味着关系已创建并存储,因此应该可以通过方法 active_relationship.followed
和 active_relationship.follower
访问它。
但是它们没有定义,我不知道为什么没有。
如果需要更多信息,请提出要求,如果它能帮助我解决这个小问题,我会很高兴。
您可以使用 user.active_relationships
来访问您的关系的元素,它是一个关系数组(关注者/被关注的关系),或者您可以将 user.active_relationships.create
的结果存储为 active_relationship
.
您的问题是 active_relationship
在您的上下文中未定义,教程一定假定您根据 create
的 return 值或通过访问数组存储了该值关系。
基本上我一直在关注 Rails 教程(我遇到了很多问题,但大多数问题都很容易解决)但现在我才刚刚开始这一章,我我 运行 在一个问题中。
这是教程的 link(在 table 14.1 练习 2 之后),由于未定义变量,我目前无法进行练习。
irb(main):035:0> active_relationship.follower \r
NameError: undefined local variable or method `active_relationship' for main:Object
from (irb):35
我不明白我在做什么,但我知道我们正在尝试通过 has_many:
和 belongs_to:
创建的关系,创建关系有效。
irb(main):021:0> user.active_relationships.create!(followed_id: 2)\r
(0.1ms) begin transaction
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]]
User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
SQL (0.3ms) INSERT INTO "relationships" ("follower_id", "followed_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["follower_id", 1], ["followed_id", 2], ["created_at", 2017-06-27 20:49:11 UTC], ["updated_at", 2017-06-27 20:49:11 UTC]]
(57.3ms) commit transaction
=> #<Relationship id: 1, follower_id: 1, followed_id: 2, created_at: "2017-06-27 20:49:11", updated_at: "2017-06-27 20:49:11">
这是新创建的文件的内容:
app/models/relationship.rb
class Relationship < ApplicationRecord
belongs_to :follower, class_name: "User"
belongs_to :followed, class_name: "User"
end
app/models/user.rb
class User < ApplicationRecord
has_many :microposts, dependent: :destroy
has_many :active_relationships, class_name: "Relationship",
foreign_key: "follower_id",
dependent: :destroy
.
.
.
问题在这里:我不明白为什么变量 (active_relationship
) 没有定义,但在控制台调用 Relationships.all 时显示如下:
#<ActiveRecord::Relation [#<Relationship id: 1, follower_id: 1, followed_id: 2, created_at: "2017-06-27 20:49:11", updated_at: "2017-06-27 20:49:11">]>
这意味着关系已创建并存储,因此应该可以通过方法 active_relationship.followed
和 active_relationship.follower
访问它。
但是它们没有定义,我不知道为什么没有。
如果需要更多信息,请提出要求,如果它能帮助我解决这个小问题,我会很高兴。
您可以使用 user.active_relationships
来访问您的关系的元素,它是一个关系数组(关注者/被关注的关系),或者您可以将 user.active_relationships.create
的结果存储为 active_relationship
.
您的问题是 active_relationship
在您的上下文中未定义,教程一定假定您根据 create
的 return 值或通过访问数组存储了该值关系。