Как я могу найти ассоциацию has_many в Rails 3 (meta_where или railslogic?) - PullRequest
1 голос
/ 29 марта 2011

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

2 голосов
/ 29 марта 2011

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

User.joins(:user_has_messages).where(:user_has_messages => {:message_id => @message.id})
1 голос
/ 29 марта 2011

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

...