[英]heroku rails 3 code error in production
我已经将应用程序移至heroku并运行良好。 当我没有汽车记录时,它将启动应用程序。
当我没有汽车记录时,它将启动应用程序
当我添加新车时,在heroku日志中收到此错误
ActionView::Template::Error (PGError: ERROR: invalid input syntax for integer: "t"
SELECT "uploads".* FROM "uploads" WHERE ("uploads".car_id = 1 AND (file_avatar = 't')) LIMIT 1):
23: <% if logged_in? && current_user.id == 1 -%>
24: <%= link_to "Select Main Photo", setmain_car_path(@car), :remote => true, :class => 'setmain' %>
25: <% end %>
26: <% if @car.profile_avatar.nil? %>
27: <div id="no_picture"><%= image_tag('na.jpeg') %></div>
28: <% else %>
29: <li style="list-style:none;">
app/views/cars/show.html.erb:26:in `_app_views_cars_show_html_erb___1259288943457494717_26795060_2985470889244562248'
在我的本地主机上的开发模式下,我没有此类错误。 任何帮助,将不胜感激。
这是引用此错误的view.html代码
<div class="latest_box">
<div class="latest_bg"></div>
<div class="last_added">Last added</div>
<div class="latest_image">
<% @cars.each do |car| %>
<div class="latest_item">
<% if car.profile_avatar.nil? %>
<%= image_tag('rails.png') %>
<% else %>
<%=link_to image_tag(car.profile_avatar.photo.url(:thumb)), car %>
<% end %><br />
<b><%= link_to car.carname.name, car %></b>
<b><%= link_to car.carmodel.name, car %></b><br />
<%= car.category %><br />
<%= number_to_currency(car.price) %>
</div>
<% end %>
</div>
汽车模型
has_many :carname
has_many :carmodel
has_one :profile_avatar, :class_name => "Upload", :foreign_key => "car_id", :conditions => ['file_avatar = ?', true]
has_many :uploads, :dependent => :destroy
您说(在注释中)您是在MySQL之上开发的。 MySQL对布尔使用整数列,其中1表示true,0表示false。 PostgreSQL有一个本机布尔类型,可以接受各种类型的真假信息,Rails在使用PostgreSQL时会使用't'
和'f'
。
你有这个:
:conditions => ['file_avatar = ?', true]
那就麻烦了 因此,我猜您file_avatar
创建为整数列,并且一切都在开发中运行良好,因为Ruby true
被MySQL适配器转换为1
。 一切都落在Heroku上,因为PostgreSQL适配器将true
转换为't'
而PostgreSQL不想将其与您的整数file_avatar
列进行比较。
最好的选择是通过迁移将file_avatar
更改为布尔列:
change_column :uploads, :file_avatar, :boolean
然后,一旦解决了这一紧迫的问题,就将开发环境更改为PostgreSQL 8.3(如果要部署到共享的Heroku数据库)或PostgreSQL 9.0(如果要部署到专用数据库)。 在同一堆栈上进行开发和部署将使您免于遭受许多不必要的痛苦。
您正在使用其他本地数据库,不是吗? 您的原始SQL与Postgres配合不好。 您需要用postgres“ true”代替您的“ t”。
(file_avatar = 'true')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.