【问题标题】:Rails SQL commands got errorRails SQL 命令出错
【发布时间】:2014-09-07 13:53:08
【问题描述】:

我有一些表格:用户、帖子、翻译、词汇表 用户可以创建帖子,对帖子上的单词进行翻译,还可以将其他人的翻译标记为词汇表以供审查。表词汇表只有 2 列 (user_id,translation_id) 在控制器中我声明变量:

@translations = @post.translations.where("translations.words=?", params[:words], params[:end]).joins("LEFT OUTER JOIN vocabularies ON vocabularies.translation_id = translations.id AND vocabularies.user_id = 6").select("translations.*")

并得到错误

SQLite3::SQLException: near "*": syntax error: SELECT COUNT(translations.*) FROM "translations" LEFT OUTER JOIN vocabularies ON vocabularies.translation_id = translations.id AND vocabularies.user_id = 6 WHERE "translations"."post_id" = ? AND (translations.words='hello')

还有一个问题,因为 :translations 和 :vocabularies 都有相同的 user_id 列,那么如何将 :vocabularies 的 user_id 别名为 learner_id 呢? 我尝试运行此命令,但仍然出现错误:SQLite3::SQLException: near "as":

@translations = @post.translations.where("translations.words=?", params[:words], params[:end]).joins("LEFT OUTER JOIN vocabularies ON vocabularies.translation_id = translations.id AND vocabularies.user_id = 6").select("translations.*, vocabularies.user_id as learner_id")

请帮帮我。谢谢。

【问题讨论】:

  • 我认为您可以将查询减少到类似@post.translations.joins(:vocabularies).where(words: params[:words] + params[:end], vocabularies: {user_id: 6}) 并在末尾添加选择
  • 我觉得我可以使用 joins 命令,但是我在使用 select 命令时遇到了问题,它出现错误 SQLException: near "*": syntax error

标签: sql ruby-on-rails rails-activerecord


【解决方案1】:

您需要构造您的where 语句,例如:

where("translations.words = ? OR translations.words = ?", params[:words], params[:end])

所以你的查询会变成:

@translations = @post.translations.where("translations.words = ? OR translations.words = ?", params[:words], params[:end]).joins("LEFT OUTER JOIN vocabularies ON vocabularies.translation_id = translations.id AND vocabularies.user_id = 6").select("translations.*, vocabularies.user_id learner_id")

【讨论】:

  • 我改了,但出现错误 SQLite3::SQLException: near "*": syntax error @post.translations.joins(:vocabularies).where("translations.start=? AND translations.end=?", params[:start], params[:end]).select("translations.*","vocabularies.user_id AS learner_id")
  • 亲爱的 RAJ,我都试过了,即使是 select("translations.*"),但仍然出现错误 SQLException: near "*": syntax error: SELECT COUNT(translations.*, vocabularies.user_id learner_id)
  • 一切都很好,直到我添加了select 命令,它与.select("translations.id") 一起工作,但因`.select("translations.*") 而失败
  • 嗯,我认为问题是当我添加一个选项.select()时,它指的是SQL中的COUNT()命令
  • 对不起,这似乎是一个错误,因为在那之后,我添加了一个命令@translations.any?,如果我删除它,一切正常,谢谢你的帮助
猜你喜欢
  • 2014-01-16
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 2021-03-02
  • 2017-01-05
相关资源
最近更新 更多