即使我的“visit_id”被定义为我的数据库中的整数,我也会收到此错误。任何人都有任何理由吗?我的本地环境是sqlite3并且运行正常,但是当我推送到heroku时,我得到了这个......下面是我的表单代码。
PG :: InvalidTextRepresentation:ERROR:类型为boolean的输入语法无效:“visit_id”
控制器
def show
@visit = Visit.find_by :visit_id
respond_with(@payment)
end
def new
@visit = Visit.find(params[:visit_id])
@payment = @visit.build_payment
end
def create
@payment = Payment.new(payment_params)
api = UrlApi.new()
url = api.unique_url
@payment.update_attribute :atapi, url
@payment.save
if @payment.save
respond_with(@payment)
else
redirect_to edit_payment_path, :alert => "Unable to update user."
end
付款表单
<div class="row form">
<div class="col-sm-6 row-col">
<div class="box">
<!--visits form -->
<%= bootstrap_form_for(@payment) do |f| %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :visit_id %>
<%= f.text_field :coupon_code %>
<%= f.check_box :coupon_valid %>
<%= f.check_box :paid %>
</div>
</div>
<div class="col-sm-6">
<div class="box">
<%= f.text_field :atapi %>
<%= f.select :seen,
[['Yes',true],['No',false]],
label: "Patient seen"
<%= f.submit %>
<% end %>
<div class="row submit">
<div class="col-md-3 right">
</div>
</div>
</div>
</div>
</div>
答案 0 :(得分:0)
你的问题可能就在这里:
@visit = Visit.find_by :visit_id
既然你给了find_by
一些不是哈希的东西,它可能会在它上面调用to_s
并生成这样的SQL:
select visits.* from visits where visit_id limit 1
在PostgreSQL中,WHERE子句的每个组件都是布尔值,因为PostgreSQL有一个真正的布尔类型,它会尝试将标识符visit_id
解释为布尔值,但visit_id
列是一个整数所以你得到:
类型为boolean的输入语法无效:&#34; visit_id&#34;
SQLite对SQL的解释比PostgreSQL和uses C-style integers for boolean values更宽松:
1.1布尔数据类型
SQLite没有单独的布尔存储类。相反,布尔值存储为整数0(假)和1(真)。
所以说where some_integer_column
对SQLite来说非常有意义。
我猜你的show
控制器应该以:
@visit = Visit.find_by(:visit_id => params[:visit_id])
或
@visit = Visit.find(params[:visit_id])