Как я могу найти ассоциацию has_many в Rails 3 (meta_where или railslogic?)

У меня есть модель под названием 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

2 ответа

Вам не нужно искать searchlogic, MetaSearch или MetaWhere, чтобы это произошло:

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

Это должно быть, вероятно, 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 и настроить некоторые области на этом. Это кажется более подходящим для того, что вы пытаетесь достичь.

Другие вопросы по тегам