2012-01-19 4 views
1

私はちょっとした問題があります。私は会社に関連する新しいプロジェクトを作成し、ログインしたユーザー(current_user)によって作成されたプロジェクトコントローラを持っています。ここでは作成アクションです。定義されていないメソッド `email 'をnilに修正する方法:NilClass with devise

def create 
    @project = @company.projects.build(params[:project].merge!(:user => current_user)) 
    #@project.user = current_user 
    if @project.save 
    #debugger 
    flash[:notice] = "Project has been created." 
    redirect_to [@company, @project] 
    else 
    flash[:alert] = "Project has not been created." 
    render :action => "new" 
    end 
end 

次のエラーでプロジェクトショーのページへのリダイレクトに上記のコードブレーク:

undefined method `email' for nil:NilClass

%b 
    Created by 
    = @project.user.email # <-- errors, not sure why 

だから私は他のすべては、そのプロジェクトを作成したユーザーを除いて保存されて知っています。もし私が.mergeを取り除いたら!私の作成方法では2つのステップでそれを行うので、それは完全にうまくいきます。

def create 
    @project = @company.projects.build(params[:project]) 
    @project.user = current_user 
    .... 

どのようにマージを使用してください!動作しませんか?私はオブジェクトにユーザーをマージすると完全に良いと思っていただろう。これについては正しい(または好ましい)方法は何ですか?

ありがとうございました

答えて

0

私はそれを理解しました。それは大量割り当ての問題でした。私はコード内にattr_accessible :title, :description, :account_number, :account_executiveを持っていましたが、それを禁止して大量の割り当てを可能にしました。