2011-10-31 12 views
0

私のアプリでは、開発マシンにuser_idをsqliteを使って保存することができます。しかし、Postgresqlを使用しているHerokuサイトにuser_idが保存されていません。SQLiteを使用していて、HerokuのPostgresqlには保存しないで保存します

class ReviewsController < ApplicationController 

    before_filter :authenticate_user!, :find_product 

    def new 
    @review = Review.new  
    end 

    def create 
    @review = @product.reviews.build(params[:review]) 
    @review.user_id = current_user.id 
    if @review.save 
     SiteUpdatesMailer.review_added(@review).deliver 
     redirect_to product_path(@product), :notice => 'Thanks for your review!'  
    else 
     render :action => :new  
    end 
    end 

    private 

    def find_product 
    @product = Product.find(params[:product_id])  
    end 

end 

ユーザーを追加するには、そのユーザーをサインインする必要があります。 user_idを別の方法で保存する必要がありますか?

答えて

1

ここに野生の推測があります:レビューには制限があり、@product.reviews.build(params[:review])と言うときにその上限を超えている文字列があります。 SQLiteはvarcharカラムのサイズ制限に注意を払わないため、PostgreSQLはカラムサイズより大きな値を挿入しようとするとエラーになります。

無料でいくつかのアドバイス:Heroku(またはSQLiteを使用していない場所)に展開する場合、SQLite上で開発しないでください。すべてのデータベースが異なり、ORMはそれらの違いからあなたを守りません。

+0

AAARrrrrghghh。さて、このコードは実際に動作します。チェックされたHerokuがアプリにログを記録し、ヘルパーの機能が爆発していました。私はテストマシンでPostgresqlを実行する方法を検討します。 – SimplyDope