1

我有一个名为 UserHasMessages 的模型,其中:

belongs_to :message
belongs_to :user

User.rb 模型是:

has_many :messages, :through => :user_has_messages

我想查找关联的 UserHasMessages 的 Message_id 为 @message.id 的用户

我尝试过这样的事情(使用搜索逻辑)但它没有用,并且不知道从哪里开始 meta_where:

User.user_has_message.message_id_is(@message.id).is_sender(false).last
4

2 回答 2

2

您不需要 searchlogic、MetaSearch 或 MetaWhere 来实现这一点:

User.joins(:user_has_messages).where(:user_has_messages => {:message_id => @message.id})
于 2011-03-29T12:49:51.600 回答
1

这应该是一种has_and_belongs_to_many关系

class User < ActiveRecord::Base

    has_and_belongs_to_many :messages

end

class Message < ActiveRecord::Base

    has_and_belongs_to_many :users

end

您还需要第三张表:

messages_users

迁移看起来像

class CreateMessagesUsers < ActiveRecord::Migration
  def self.up
    create_table :messages_users do |t|
      t.integer :user_id
      t.integer :message_id

      t.timestamps
    end
  end

  def self.down
    drop_table :messages_user
  end
end

设置完成后,您可以调用

@user.messages或者@message.users并在上面设置一些范围。这似乎更适合您要完成的工作。

于 2011-03-29T00:59:34.883 回答