2010-11-29 11 views
0

私のフォームには2つのモデルプロファイルとユーザーがあります。ユーザが作成された後、彼は彼のプロフィールの編集に移ることができる。ビューはうまくいく。しかし、「保存」をクリックすると、編集されたプロファイルが更新されます。それは更新されませんが、フラッシュ通知はそのプロファイルが更新されたことを表示します。何が間違っているのでしょうか?何が間違っているのか分かりません。以下はコードです。ROR:2つのモデルを1つのフォームから更新する

class ProfilesController < ApplicationController 

    def new 
    #@user.profile = Profile.new 
    @user = User.find(current_user.id) 
    @identity = @user.profile || @user.build_profile() 
    @identity.save 
    end 

    def update 
    @user = current_user 
    @identity = @user.profile 
    if @identity.update_attributes(params[:identity]) 
     flash[:notice] = 'Profile was successfully updated.' 
     redirect_to(new_profile_path()) 
    else 
     render :action => "new" 
    end 
    end 
end 


class UsersController < ApplicationController 

    def show 
    @user = current_user 
    @user = User.find(params[:id]) 
    @identity = @user.profile || @user.build_profile() 
    @identity.save 
    end 

...... 

end 

ご協力いただきありがとうございます。

+0

あなたのdevelopment.logをチェックして、どのパラメータが渡されているのかを確認してください。おそらくparams [:identity]で何も送信していないかもしれません。 – Cory

+0

ただ頭を上げてください。 '@identity = @user。プロフィール|| @ user.build_profile() 'を' @user.profile || = Profile.new'に追加します。 – ryeguy

+0

@Cory ..ログを確認したところ、それは成功しているようですが、項目はまだ更新されていません。 – user487429

答えて

0

ここでは、いくつか問題が発生する可能性があります。しかし、この問題を解決する最善の方法は、関連付けを編集するための組み込みのレール機能を単純化して使用することです。

私が提案しているのは、ネストされた属性Ryan Daigle has a great article on themを使用することです。

あなたが正しい感じていないcreatenewアクションではなく、中にsaveを呼んでいる理由は、私はよく分かりません。また、送信しているフォームのモデル名がidentityで、userまたはprofileではないことを確認してください。

ユーザーはプロファイルなしで存在することはできますか?

+0

返信jonniiありがとうございます。ユーザーはプロファイルなしでは存在できません。ユーザーは1つのプロファイルを持ち、プロファイルは1人のユーザーに属します。 – user487429

+0

ユーザーが作成されたときにプロファイルを作成するためにコールバックを追加すると、コードが簡単になります。 – jonnii

+0

@ jonnii..どうしたらいいですか?コードサンプルを表示できますか? – user487429

関連する問題