【问题标题】:Rails application using mysql - syntax error only with mysql not sqlite?使用mysql的Rails应用程序-仅使用mysql而不是sqlite的语法错误?
【发布时间】:2014-06-10 01:22:18
【问题描述】:

我对@9​​87654321@ 非常满意,并且一直在努力让应用程序与 mysql 一起使用,当从mysql 数据库加载资产时,除了一个特定页面之外,一切正常。

我不确定发生了什么,也没有运气修复它。

我在ubuntu 上运行,与passenger 4.0.20mysql 2.9.1 gemrails 3.0.7

在乘客守护进程下或通过严格的 apache 查看页面时,应用程序会返回:

Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '== 'assets')' at line 1: SELECTtypes.* FROMtypesWHERE (type_for == 'assets')

提取的源代码(第 52 行附近):

49:   </div>
50:   <div class="field">
51:     <%= f.label :asset_type_id %><br />
52:     <%= f.select :asset_type_id, Type.where("type_for == 'assets'").collect{|u| [ u.name, u.id ]} , { :include_blank => true }, {}  %>    
53:   </div>
54:   <div class="field">
55:     <%= f.label :asset_status_id %><br />  

app/views/assets/_form.html.erb:52:in `block in_app_views_assets__form_html_erb___1678548858904611904_30514700_2370109183913626002'
app/views/assets/_form.html.erb:1:in         `_app_views_assets__form_html_erb___1678548858904611904_30514700_2370109183913626002'
app/views/assets/new.html.erb:3:in `_app_views_assets_new_html_erb___211939086717483877_30551560__3850816556217762359'

我已经完成了所有可能的尝试,但不确定该去哪里。现在任何帮助都会很棒。

【问题讨论】:

  • 清楚地编辑您的帖子...

标签: php mysql ruby-on-rails ruby sqlite


【解决方案1】:

您在这一行有语法错误

<%= f.select :asset_type_id, Type.where("type_for == 'assets'").collect{|u| [ u.name, u.id ]} , { :include_blank => true }, {} %>

应该是这样的

<%= f.select :asset_type_id, Type.where("type_for" => "assets").collect{|u| [ u.name, u.id ]} , { :include_blank => true }, {} %>

你可以写成

<%= f.select :asset_type_id, Type.where("type_for = ?", "assets").collect{|u| [ u.name, u.id ]} , { :include_blank => true }, {} %>

<%= f.select :asset_type_id, Type.where(:conditions =>["type_for = ?", "assets"]).collect{|u| [ u.name, u.id ]} , { :include_blank => true }, {} %>

正如@MikeCampbell所指出的,它也可以写成

<%= f.select :asset_type_id, Type.where("type_for" :"assets").collect{|u| [ u.name, u.id ]} , { :include_blank => true }, {} %>

【讨论】:

  • "type_for ?" 应该是 "type_for = ?"
  • @KirtiThorat 谢谢!已更新。
  • "type_for" = "assets" 也应该是"type_for" =&gt; "assets",或者最好是type_for: "assets"
  • @MikeCampbell 谢谢!很难相信我错过了。
  • 谢谢,是的 == vs =。那成功了。正看着我的脸。我很高兴 stackoverflow 是一件事。
【解决方案2】:

您必须从第 52 行删除 == 并仅替换为 =

52:     <%= f.select :asset_type_id, Type.where("type_for = 'assets'").collect{|u| [ u.name, u.id ]} , { :include_blank => true }, {}  %>    

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多