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