2011-12-09 21 views
0

私は開発者とプロダクション(共有Webサーバー上)の違いがあります。自分のアプリケーションのコントローラでは、私は更新を保存する方法の一部として、これらの2行いますcurrent_userはプロダクションサーバーのセッションに保存されていません

@activity.update_attribute(:user_id, current_user.id) 
@activity.update_attribute(:company_id, current_user.company.id) 

dev内のuser_idとのcompany_idの両方が知られており、データベースに保存されます。これは、セッション情報をcurrent_userに格納するbeforeフィルタが存在するためです。

しかし、共有プロダクションサーバー上のコードとまったく同じコードでは、レコードをデータベースに格納するときにエラーが発生し、ログを見ると両方の値がNULLになります。エラーは次のとおりです。

"ActiveRecord::StatementInvalid (Mysql2::Error: Column 'company_id' cannot be null: INSERT INTO `activities` (`activity`, `company_id`, `created_at`, `updated_at`, `user_id`) VALUES ('Test', NULL, '2011-12-09 09:01:29', '2011-12-09 09:01:29', NULL)):" 

私にはセッションが正しく保存されていないようです。私は周りを捜し求めていますが、私が見つけることができる唯一の考えは、あなたが "allow_http_basic_auth"をユーザモデルに追加しなければならないというこの記事です。私は(私は道でAuthlogicを使用していない)ことを行うと、それは、このエラーを返します:

undefined method `allow_http_basic_auth' for #<User:0x007f91990efce0> 

任意のアイデアは素晴らしいことです!

編集:私はこれを持っているアプリケーションのコントローラで:

helper_method :current_user 

    def current_user 
     @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    # Save new activity/update 
    def store_update(activity) 
    @activity = Activity.new 
    @activity.update_attribute(:activity, activity) 
    @activity.update_attribute(:user_id, current_user.id) 
    @activity.update_attribute(:company_id, current_user.company.id) 
    @activity.save 
    end 
+0

エラーがある...

@activity = Activity.new @activity.update_attributes(:activity => activity, :user_id => current_user.id, :company_id => current_user.company.id) 

そして、私は、なぜ完全にわからない:これに

@activity = Activity.new @activity.update_attribute(:activity, activity) @activity.update_attribute(:user_id, current_user.id) @activity.update_attribute(:company_id, current_user.company.id) @activity.save 

:それは今、これを変更することで動作します適切な場所が例外を投げる? – bender

+0

SQL INSERTエラーは、user_idおよびcompany_idがcurrent_user値で設定されていないために発生します。 – John

+0

インスタンス変数を設定する必要があるフィルタの前の部分から関連する部分を表示できますか?また、どのセッションストアを使用していますか? – edk750

答えて

0

問題がセッションではなかった、ロガーはちょうどレコードを保存する前に、正しいセッション値を示しました。これは、SQL INSERTは、更新しないから