2010-02-23 69 views
0

我有机型轨HABTM联接和不便

之间的工作HABTM协会

帖子和用户...的posts_users表所标榜且都有必要has_and_belongs_to_many他们model.rb

如果我用User.find(1).posts它会发现所有帖子的有效用户名为

我的问题是如何处理这种情况。

我想用

user.posts.find(1234)或真正从控制器EQ:

current_user.posts.find(params[:id]) 

为了保护自己不受其他用户跳来跳去。但是这种用法有一些奇怪的结果。它的工作,但不是ID为特定职位或所有职位的有效ID,则返回1,而不是说的ID,1234真钞所以进一步加入如:

user.posts.find(1234).comments 

不工作或无效。

我试着在all的地方投掷一些很好的方法,因为它有时可以用于过去的其他尴尬情况。几个陌生人遇到仍然。

user.posts.all.first工作并返回正确的ID!,但首先使用并不真正有用。 user.posts.all.find(6933)回报#<Enumerable::Enumerator:0x105343630>

也尝试了各种组合(:post_id => 1234)返回的始终是1

任何想法的ID?

+0

轨道2.3.5的情况下,它的事项 – holden 2010-02-23 03:07:51

+0

我认为这个问题是因为它是一个协会,你总是会看到一个数组/枚举返回 – 2010-02-23 04:15:35

+0

另外:如果你知道POST_ID,你为什么需要通过用户映射吗? – 2010-02-23 04:16:02

回答

1

这很可能是因为您的连接表posts_users有一个id列。在您的迁移中,连接表应该看起来像这样的:

create_table :posts_users, :id => false do |t| 
    t.references :posts 
    t.references :users 
end 
+0

完美谢谢!除非我尝试使用find()和friendly_id而不是ID,friendly_id将返回正确的记录,但带有friendly_id的ID和不是职位。 – holden 2010-02-23 12:11:17

+0

不知道你确切的问题是在那里,但是我在find方法中使用明确的':select =>'tablename。*''来解决其中的一些问题,以确保只有一个表的列被拉回。 – 2010-02-23 17:03:57

0

用户如何通过帖子有很多评论。然后像user.comments.find(:all::conditions => {:post_id => 1234}