Ruby ActiveRecord未知列

Ruby ActiveRecord未知列,ruby,activerecord,has-many-through,mysql2,Ruby,Activerecord,Has Many Through,Mysql2,我遇到了一个小问题,我有一个多通的关系,这里是模型的代码 class用户:friends,:foreign\u key=>“followered\u id” 结束 类友谊“用户”;:外部密钥=>“后续id” 结束 现在,在控制台上,我可以键入u=User.first,然后键入u.friendships.first.following,这会给出u正在跟踪的第一个用户,但是当我键入u.friendships.last.following时,我会得到这个错误 来自u.friendships.firs

我遇到了一个小问题,我有一个多通的关系,这里是模型的代码

class用户:friends,:foreign\u key=>“followered\u id”
结束
类友谊“用户”;:外部密钥=>“后续id”
结束
现在,在控制台上,我可以键入u=User.first,然后键入u.friendships.first.following,这会给出u正在跟踪的第一个用户,但是当我键入u.friendships.last.following时,我会得到这个错误

来自u.friendships.first.following的SELECT语句

Friendship Load (0.3ms)  SELECT `friendships`.* FROM `friendships` WHERE `friendships`.`user_id` = 208 LIMIT 1
User Load (0.2ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 209 LIMIT 1
Friendship Load (0.3ms)  SELECT `friendships`.* FROM `friendships` WHERE `friendships`.`user_id` = 208 ORDER BY `friendships`.`` DESC LIMIT 1
下面是“美国友谊”的SELECT语句

Friendship Load (0.3ms)  SELECT `friendships`.* FROM `friendships` WHERE `friendships`.`user_id` = 208 LIMIT 1
User Load (0.2ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 209 LIMIT 1
Friendship Load (0.3ms)  SELECT `friendships`.* FROM `friendships` WHERE `friendships`.`user_id` = 208 ORDER BY `friendships`.`` DESC LIMIT 1
ActiveRecord::StatementInvalid:Mysql2::错误:未知列“friendships.”在“order”中
子句”:从“友谊”中选择“友谊”。“用户id”=208
按“友谊”订购。“描述限制1”

如果我再次运行u.friends,然后再运行u.friends.last.following,我就不会再收到错误,为什么会这样?

这是我的
友谊的sql输出,直接来自Rails 3.2.9/postgresql上的代码:

# u.friendships.first.following
Friendship Load (0.9ms)  SELECT "friendships".* FROM "friendships" WHERE "friendships"."user_id" = 1 LIMIT 1

# u.friendships.first.following
Friendship Load (1.3ms)  SELECT "friendships".* FROM "friendships" WHERE "friendships"."user_id" = 1 ORDER BY "friendships"."id" DESC LIMIT 1
因此,出于某种原因,
id
会被“友谊”按
顺序自动提取。“id”
会起作用。也许你的问题与你的DB有关

#Statements used to create the db for reproducing this problem
CREATE TABLE users (id SERIAL PRIMARY KEY)
CREATE TABLE friendships (
    id            SERIAL PRIMARY KEY,
    user_id       integer
    followed_id   integer 
);

这是我对
友谊的sql输出,直接来自Rails 3.2.9/postgresql上的代码:

# u.friendships.first.following
Friendship Load (0.9ms)  SELECT "friendships".* FROM "friendships" WHERE "friendships"."user_id" = 1 LIMIT 1

# u.friendships.first.following
Friendship Load (1.3ms)  SELECT "friendships".* FROM "friendships" WHERE "friendships"."user_id" = 1 ORDER BY "friendships"."id" DESC LIMIT 1
因此,出于某种原因,
id
会被“友谊”按
顺序自动提取。“id”
会起作用。也许你的问题与你的DB有关

#Statements used to create the db for reproducing this problem
CREATE TABLE users (id SERIAL PRIMARY KEY)
CREATE TABLE friendships (
    id            SERIAL PRIMARY KEY,
    user_id       integer
    followed_id   integer 
);


猜测对u.friendships.last的调用会在缓存中结束,这样当您调用u.friendships.last时,它只需要转到以前检索的列表中的最后一项。我对我的帖子进行了一些编辑,以便您可以看到SELECT语句,我想知道,为什么这两个语句之间存在差异,如果ActiveRecord.last只能返回一条记录,为什么它会使用ORDER BY子句?您是否尝试在查询中指定要按顺序排序的列<代码> U.Fualths.Orthy:(代码:>代码> U.Fualth.Orthor(:CealDeTo.A.).最后.跟随 \n或在模型中尝试一个默认范围:<代码> Debug TySnopy命令('CealDead DeCc)我相信ActValeCordD使用OrthRead是因为它需要知道您认为的“最后”记录.这不是我的查询,这是从ActiveRecord自动生成的查询,您看到的SELECT查询是从控制台输出的查询,猜测对u.friendships.last的调用会在缓存中结束,因此当您调用u.friendships.last时,它只需要转到先前检索列表中的最后一项。我对我的帖子进行了一些编辑,以便您可以看到SELECT语句,我想知道,为什么它们之间有区别,为什么ActiveRecord.last在只能返回一条记录的情况下使用ORDER BY子句?您是否尝试在查询中指定一列作为ORDER BY<代码> U.Fualths.Orthy:(代码:>代码> U.Fualth.Orthor(:CealDeTo.A.).最后.跟随 \n或在模型中尝试一个默认范围:<代码> Debug TySnopy命令('CealDead DeCc)我相信ActValeCordD使用OrthRead是因为它需要知道您认为的“最后”记录.这不是我的查询,这是从ActiveRecord自动生成的查询,您看到的SELECT查询是来自控制台输出的查询。我确实在创建友谊表时排除了id列,因为has_和_属于_many之间存在误解,has_many通过^^ahhh yeh可以做到这一点。我猜您没有让rails为您生成这些迁移?哦,我确实让rails生成了迁移,但我在create_table语句中输入了:id=>false;)是的,我发现has_和_besides_to_many只有当你需要存储的关于关联多个模型的唯一数据是关联存在的事实时才有用。您不能使用ActiveRecord查询habtm表,因为没有定义模型的
id
或更重要的
Class
!愚蠢的我,我确实在创建友谊表时排除了id列,因为has_和_属于_many和has_many之间有一个误解。我猜您没有让rails为您生成这些迁移?哦,我确实让rails生成了迁移,但我在create_table语句中输入了:id=>false;)是的,我发现has_和_besides_to_many只有当你需要存储的关于关联多个模型的唯一数据是关联存在的事实时才有用。您不能使用ActiveRecord查询habtm表,因为没有定义模型的
id
或更重要的
Class