has_and_belongs_to_many关系返回的对象不正确

时间:2011-03-03 17:54:45

标签: ruby-on-rails has-and-belongs-to-many

我有两个模型,UserDiscussion

用户模型

has_and_belongs_to_many :subscribed_discussions, :class_name => 'Discussion', :join_table => 'discussions_subscriptions'
has_many :discussions

讨论模式

has_and_belongs_to_many :subscribed_users, :class_name => 'User', :join_table => 'discussions_subscriptions'
belongs_to :user

当我访问用户u.subscribed_discussions[0].user_id的讨论时,我得到的user值与我直接从Discussion.find

直接访问用户时的值完全不同
system :029 > u.subscribed_discussions.first == Discussion.find(10)
 => true 
system :030 > Discussion.find(10)
 => #<Discussion id: 10, title: "MBA", content: "What do you think about management education, speci...", user_id: 7, created_at: "2011-01-24 21:44:22", updated_at: "2011-01-24 21:44:22", group_id: nil, profile_id: 8> 
system :031 > u.subscribed_discussions.first                       
 => #<Discussion id: 10, title: "MBA", content: "What do you think about management education, speci...", user_id: 1, created_at: "2011-01-24 21:44:22", updated_at: "2011-01-24 21:44:22", group_id: nil, profile_id: 8> 
system :032 > u.id
 => 1 
system :034 > Discussion.find(10).user_id
 => 7 

u订阅参与ID = 10的讨论的用户。当我通过subscribed_discussions关系访问讨论并访问其用户时,我得到u,而不是该讨论的创建者。

2 个答案:

答案 0 :(得分:0)

我假设你的Discussion模型belongs_to :user,这意味着讨论模型上的user_id字段将是该用户,它与has_and_belongs_to_many :subscribed_users关联无关。< / p>

您可以发布模型和schema.rb吗?这将使您更容易理解您的模型正在做什么。

此外,我建议远离HABTM并使用has_many :through代替,它会为您提供更丰富的模型。

答案 1 :(得分:0)

我在IRC上证实了这是Rails 3中HABTM关系中的一个错误,如果其中一个表和连接表都有一个同名的列。