2011-05-02 33 views
3

我有正常工作Mysql2 ::錯誤:爲了條款列「created_at」不明確

ObjectItem.find(:all, :include => :object_groups, :conditions => "object_items.description LIKE '%#{search}%' OR object_groups.description LIKE '%#{search}%'", :order => 'object_items.created_at DESC') 

但是這樣做的查詢現在這種方式已經過時所以我想改變這個下面的查詢形式

ObjectItem.order('object_items.created_at DESC').includes(:object_groups).where("object_items.description LIKE '%#{search}%' OR object_groups.description LIKE '%#{search}%'") 

但我發現了以下錯誤:

Mysql2::Error: Column created_at in order clause is ambiguous: SELECT DISTINCT `object_items`.id FROM `object_items` LEFT OUTER JOIN `object_groups_object_items` ON `object_groups_object_items`.`object_item_id` = `object_items`.`id` LEFT OUTER JOIN `object_groups` ON `object_groups`.`id` = `object_groups_object_items`.`object_group_id` WHERE (object_items.description LIKE '%%' OR object_groups.description LIKE '%%') ORDER BY object_items.created_at DESC, created_at DESC LIMIT 20 OFFSET 0 
+0

你對默認的排序順序同樣的事情來工作模型?我有類似的問題。我有一個* default_scope *設置像* default_scope命令('ID DESC')*,通過將其更改爲* default_scope命令('

.ID DESC')我修復了它。 – Roger2013-12-12 23:51:54

回答

0

這通常是結果相同的字段名稱出現在多個表中。

就你而言,它看起來像object_items和object_groups都有相同的字段'created_at'。

最好的事情(在我看來)將是通過(例如)使用字段名稱的前綴來重命名其中一個表中的字段。

+2

也許這不是一個好主意,因爲它是由Rails自己生成和使用的,所以更改此字段名稱並不是一個好主意。 – Quantum 2011-05-02 17:22:38

1
ORDER BY object_items.created_at DESC, created_at DESC LIMIT 20 OFFSET 0 

正如前面的答案所說,它有一個懸掛的「created_at」,可以引用任一表中的列。

顯然不是你直接通過.order傳入的那個 - 所以也許你有一個默認範圍,在你的模型中有默認的順序。 如果您明確地提出該問題,可能會解決問題。

+0

謝謝你是對的,我確實有'default_scope' – WaKeMaTTa 2017-02-07 14:42:16

0

你是如何在ObjectItem模型中定義object_groups關係的?

has_many :object_groups, :order => "created_at DESC" 
-1

我就遇到了這個今天在施普雷項目:如果你有類似ObjectItem以下關係

ORDER BY created_ar DESC可以被添加到查詢。它幾乎總是由將表名關閉在order子句中引起的。看到這個票我是如何解決這個問題:https://github.com/spree/spree/issues/2654

在我的情況,我又增加了一個裝飾我的大禮包車型之一,它被添加順序條款沒有相應的表名。

11

順序(「users.created_at DESC」)

基本問題是,有可能是連接查詢因此表有created_at字段,以便它拋出錯誤。 如果您想根據哪個表created_at命令結果,請使用您命令結果的table_name.field_name。

+0

你好@Quantum,請接受這個或任何答案,如果它解決了。 – 2015-04-11 10:58:21

+0

這個答案應該被接受,因爲它明確地定義了模棱兩可的問題 – Andrius 2016-07-01 08:52:03

1

試試這個: 順序( 'users.created_at DESC') 或 順序(created_at:ASC)

應該