Tag: finder sql

finder_sql不使用Rails解析字符串

我有一个问题,我用于finder_sql的查询在被移交给PostgreSQL之前没有被正确解析导致数据库语法错误。 为了说明这个问题我刚才使用了示例代码: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html 我只将class_name更改为”User”因为我没有人模型,但这并不重要。 has_many :subscribers, :class_name => “User”, :finder_sql => ‘SELECT DISTINCT people.* ‘ + ‘FROM people p, post_subscriptions ps ‘ + ‘WHERE ps.post_id = #{id} AND ps.person_id = p.id ‘ + ‘ORDER BY p.first_name’ 当我使用它时,我收到以下错误: User Load (0.3ms) SELECT DISTINCT people.* FROM people p, post_subscriptions ps WHERE ps.post_id = #{id} AND ps.person_id = […]

将复杂的has_many关系移植到Rails> 4.1(没有finder_sql)

我正在将Rails应用程序移植到Rails 4.2。 这个Rails应用程序在关联中包含一些相当复杂的手动SQL代码 – 部分原因是DB优化(例如子选择而不是JOIN),部分原因是由于在编写时没有可行的替代方案(Rails 3.0),部分原因是由于缺乏知识(我希望,至少 – 这很容易解决)。 示例:InternalMessage类。 可以在用户之间发送消息(InternalMessage的收件人和消息的“删除”,存储在InternalMessagesRecipients中,因为可以有几个),并且可以读取,回复,转发和删除它们。 该关联看起来像这样: class User “SELECT DISTINCT(internal_messages.id), internal_messages.* FROM internal_messages ” + ‘ LEFT JOIN internal_messages_recipients ON internal_messages.id=internal_messages_recipients.internal_message_id’ + ‘ WHERE internal_messages.sender_id = #{id} OR internal_messages_recipients.recipient_id = #{id}’, :counter_sql => ‘SELECT count(DISTINCT(internal_messages.id)) FROM internal_messages ‘ + ‘ LEFT JOIN internal_messages_recipients ON internal_messages.id=internal_messages_recipients.internal_message_id’ + ‘ WHERE internal_messages.sender_id = […]