1

我有一個模型叫UserHasMessages在哪裏(meta_where或railslogic?):我如何通過的Rails 3的has_many關聯搜索

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 

回答

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並在其上設置一些範圍。這似乎更適合你想要完成的事情。

+0

難道我們也這樣做的類或對象下?它不會更像是@ user.messages.find_by_id ...嗎?也許我錯過了一些東西。午後的小睡是智力的死亡 – 2011-03-29 01:14:36

+0

您的權利,更新答案,以反映 – jaredonline 2011-03-29 01:21:11

+0

@jaredonnline - 謝謝,我必須提取他們,因爲每個消息都有一個發件人和一個接收者,並且人可能會刪除或更改sof roth,所以我需要抽象它有兩個單獨的關聯...將這項工作,因爲它是:has_many,:通過? – Angela 2011-03-29 05:07:25

2

你不應該需要searchlogic,整合檢索,也沒有MetaWhere要做到這一點:

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