SQL到Active Record:联接中的伪列?

| 我正在自学框架,并且一直在搞Active Record。我遇到了一个问题,该问题可以通过原始SQL轻松解决,并且我想知道将其移植到Active Record的最佳方法... 我有以下数据库架构... 创建表格聊天(   id int(11)默认为NULL,   user_id int(11)默认为NULL,   长文本 )ENGINE = MyISAM DEFAULT CHARSET = latin1; CREATE TABLE状态(   chat_id int(11)默认为NULL,   user_id int(11)默认为NULL,   is_read tinyint(1)缺省NULL )ENGINE = MyISAM DEFAULT CHARSET = latin1; 创建表用户(   id int(11)默认为NULL,   名称varchar(255)DEFAULT NULL,   邮件varchar(255)默认为空 )ENGINE = MyISAM DEFAULT CHARSET = latin1; 我想在Active Record中执行以下操作,其中联接中的1是当前用户ID ... 选择 c。*,s.is_read 从聊天室c 左联接状态s ON c.id = s.chat_id AND 1 = s.user_id 如何设置这种关系,以便在聊天对象中有一个简单的“已读”变量?我知道我可以通过对我拥有的聊天和状态模型执行各种逻辑来做到这一点,但这似乎还更麻烦?     
已邀请:
class Chat
  belongs_to :user
  has_one :status, :through => :user 
  scope :readed, joins(:status).where(:status => {:is_read => true})
  scope :unreaded, joins(:status).where(:status => {:is_read => false})

  delegate :is_read, :to => :status
end

class Status
  belongs_to :user
  belongs_to :chat
end

class User
  has_many :chats
  has_many :statuses
end

@current_user.chats.readed #=> select all user chats where chat status is_read = true
@current_user.chats.unreaded
@current_user.chats.first.is_read
    
class Chat < ActiveRecord::Base
  has_many :statuses
end

class Status < ActiveRecord::Base
  belongs_to :chat
end
稍后在您的代码中
@chat = Chat.where( \'some where clause\' )
@chat.statuses.where( \'some where clause for status\' ).is_read
    

要回复问题请先登录注册