2017-08-02 11 views
0

sqliteとMariaDBにクエリの問題があります。私はsqliteを使用していますが、サーバーではMariaDBを使用しています。開発中のクエリ作業Railsのactiverecordクエリがsqliteで動作しません。

Author.includes(:books, employes: :universities).where("universities.id is ? and books.year is ?", 
        @author.employes.first.universities.first.id, @book.jahr).references(:employes, :books) 

しかし、これはエラーが発生します。私が=に変更すると、サーバーでは動作しますが、ローカルでは結果が生成されません。

Author.includes(:books, employes: :universities).where("universities.id = ? and books.year = ?", 
        @author.employes.first.universities.first.id, @book.jahr).references(:employes, :books) 

これはサーバーで機能しますが、ローカルでは結果が生成されません。

このような場合はどうなりますか?

Author.includes(:books, employes: :universities).where("universities.id = ? and books.year = ? and employes.name like ? and id IN ?", 
         @author.employes.first.universities.first.id, @book.jahr, "%#{@employe.name}%", [1,2,3]).references(:employes, :books) 
+1

最初:基本的なアーキテクチャー設計では、開発と生産で異なるデータベースサーバーを使用して失敗しました... 2番目に生成されたSQLクエリをチェックします。 –

答えて

2

第1に、開発と生産環境で異なるデータベースを使用しないでください。

しかし、今はActiveRecordの道を行くことによって、SQLの構文エラーを回避することができためlikeにはActiveRecordの代替がないので、likeは両方に有効であるので、あなたは、これは(それが動作する試すことができ、この

Author.includes(:books, employes: :universities).where(
    universities: { id: @author.employes.first.universities.first.id }, 
    books: { year: @book.jahr } 
).references(:employes, :books) 

を試してみてくださいMySQLとSQLite)

Author.includes(:books, employes: :universities).where(
    authors: { id: [1,2,3] }, 
    universities: { id: @author.employes.first.universities.first.id }, 
    books: { year: @book.jahr } 
).where('employes.name like ?', "%#{@employe.name}%").references(:employes, :books) 

希望に役立ちます!

+2

'where'がハッシュを渡す場合、' references'を使う必要はありません –

+0

こんにちは!それは素晴らしい仕事をした。上記の編集で、ActiveRecordによるクエリの実行方法を教えてください。 – asdfkjasdfjk