如何在 Rails 3 中搜索 has_many 关联(meta_where 或railslogic?)

发布于 2024-10-27 04:06:24 字数 427 浏览 8 评论 0原文

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

belongs_to :message
belongs_to :user

User.rb 模型是:

has_many :messages, :through => :user_has_messages

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

我尝试了类似的操作(使用 searchlogic),但它不起作用,并且做了不知道从哪里开始meta_where:

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

I have a model called UserHasMessages where:

belongs_to :message
belongs_to :user

And User.rb model is:

has_many :messages, :through => :user_has_messages

I want to find Users where the associated UserHasMessages has a Message_id of @message.id

I tried something like this (using searchlogic) but it didn't work, and did not know where to begin with meta_where:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

じ违心 2024-11-03 04:06:24

您不需要 searchlogic、MetaSearch 或 MetaWhere 来实现此目的:

User.joins(:user_has_messages).where(:user_has_messages => {:message_id => @message.id})

You shouldn't need searchlogic, MetaSearch, nor MetaWhere to make this happen:

User.joins(:user_has_messages).where(:user_has_messages => {:message_id => @message.id})
沉溺在你眼里的海 2024-11-03 04:06:24

这可能应该是一个 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 并在其上设置一些范围。这似乎更适合您想要完成的任务。

This should probably be a has_and_belongs_to_many relationship

class User < ActiveRecord::Base

    has_and_belongs_to_many :messages

end

class Message < ActiveRecord::Base

    has_and_belongs_to_many :users

end

You will also need a third table:

messages_users

And the migration will look something like

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

Once that is setup, you can call

@user.messages or @message.users and setup some scopes on that. This seems more appropriate for what you're trying to accomplish.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文