Heroku PG错误,没有显示在开发中

时间:2014-11-17 03:26:37

标签: ruby-on-rails postgresql heroku rails-activerecord

即使我的“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>

1 个答案:

答案 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])