Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails PostgreSQL,Rails+Heroku,列必须出现在“分组依据”中_Ruby On Rails_Postgresql_Group By - Fatal编程技术网

Ruby on rails PostgreSQL,Rails+Heroku,列必须出现在“分组依据”中

Ruby on rails PostgreSQL,Rails+Heroku,列必须出现在“分组依据”中,ruby-on-rails,postgresql,group-by,Ruby On Rails,Postgresql,Group By,在Heroku上部署我的应用程序时出现此错误: Started GET "/collections/transect/search?utf8=%E2%9C%93&search%5Btagged_with%5D=village&commit=Search" for 98.201.59.6 at 2011-03-27 17:02:12 -0700 ActionView::Template::Error (PGError: ERROR: column "photos.custom_

在Heroku上部署我的应用程序时出现此错误:

Started GET "/collections/transect/search?utf8=%E2%9C%93&search%5Btagged_with%5D=village&commit=Search" for 98.201.59.6 at 2011-03-27 17:02:12 -0700

ActionView::Template::Error (PGError: ERROR:  column "photos.custom_title" must appear in the GROUP BY clause or be used in an aggregate function
: SELECT  "photos".* FROM "photos" INNER JOIN "taggings" ON "photos"."id" = "taggings"."photo_id" INNER JOIN "tags" ON "tags"."id" = "taggings"."tag_id" WHERE "tags"."name" IN ('village') AND ("photos".collection_id = 1) GROUP BY photos.id LIMIT 20 OFFSET 0):
     17: 
     18: - @bodyclass = 'dark'
     19: #search_view.photo_tiles
     20:   = render :partial => 'collections/photos/alt_tiles', :collection => @photos, :as => :photo
   app/views/collections/search.html.haml:20:in `_app_views_collections_search_html_haml__2343730670144375006_16241280__2249843891577483539'
我看到了这些类似的问题

问题是,此视图中没有任何内容要求自定义标题属性,也没有使用group_by子句执行查询

以下是引发错误的部分原因:

- ((photo_counter+1) % 5 == 0) ? @class = 'last' : @class = ''
.photo{ :class => @class }
  .alt_tile
    = link_to( image_tag(photo.file.url(:tile)), collection_photo_path(@collection,photo), :class => 'img_container' )
    .location= photo.location(:min)
    .tags= photo.tag_array.join(' | ')
def search
  @curator_toolbar = true
  @collection = Collection.find(params[:id])
  @search = @collection.photos.search(params[:search])
  @photos = @search.page(params[:page]).per(20)
end
以下是引发错误的CollectionSearch操作:

- ((photo_counter+1) % 5 == 0) ? @class = 'last' : @class = ''
.photo{ :class => @class }
  .alt_tile
    = link_to( image_tag(photo.file.url(:tile)), collection_photo_path(@collection,photo), :class => 'img_container' )
    .location= photo.location(:min)
    .tags= photo.tag_array.join(' | ')
def search
  @curator_toolbar = true
  @collection = Collection.find(params[:id])
  @search = @collection.photos.search(params[:search])
  @photos = @search.page(params[:page]).per(20)
end
看来这可能是一个插件问题?我使用MetaSearch实现搜索功能,使用Kaminari进行分页。是否有人有任何想法或建议,具体是什么原因造成的,以及我如何可能修复它

-编辑-

好吧,我似乎发现了真正的问题:

使用MetaSearch和我的关键字标记模型,我创建了一个如下所示的搜索方法:

def self.tagged_with( string )
  array = string.split(',').map{ |s| s.lstrip }
  joins(:tags).where('tags.name' => array ).group('photos.id')
end
现在,我在创建这个方法时得到了很多帮助——正如我前面提到的,我是一个十足的SQL白痴

此方法适用于SQLite,但不适用于PostgreSQL,因为只要搜索中包含关键字,它就会触发group_by problem

因此,在中,它似乎表明我需要将照片模型中的每一列都放在组参数中,否则Postgre将中断

这让我感到恐惧的原因有几个:

我的照片模型非常复杂,有很多字段。 我的应用程序仍在开发中,照片模型的变化比任何其他应用程序都要大。 我不希望以后每次有人触摸照片模型时,如果他们忘记在标记搜索参数的group语句中添加列,我的代码就会中断。
那么,有谁能帮助我理解如何重写这个方法,使它不会破坏PostgreSQL?理想情况下,这样我就不必在解决方案中包含属于此模型的所有字段的列表,或者至少不必手动维护列表?

,事实证明,我可以通过在我的tagged_with方法中将group替换为select来解决这个问题


问题解决了!请参阅这篇文章,了解为什么这是一个更好的想法。很抱歉,网站后来被删除了,我不记得它说了什么。另外,感谢他对一个衍生问题的回答,这个问题解决了我的问题。

GROUP BY photos.id LIMIT 20 OFFSET 0-你从MySQL中提取了这个,我没有从任何地方提取任何SQL,我是一个SQL白痴-因此这个问题。你知道Kaminari和/或元搜索吗?你知道哪一个会生成这个查询吗?只有MySQL和SQLite支持你发布的声明中的功能。太好了,我相信你!现在,您是否对查询的起源有任何建议,以便我可以修复它?我没有在代码中编写任何查询,但我使用了两个插件。我对SQL或MetaSearch或Kaminari的工作原理了解不够,不知道如何查找问题和/或修复问题。好吧,.search方法只适用于activerecord对象,因此将其链接到数组photo_id不起作用。链接已失效。这是我们不喜欢外部链接的原因之一。如果你还记得为什么它说这个主意很棒,请编辑并总结。@RichardTheKiwi链接被删除,对不起,我不记得它说了什么。