2012-03-20 9 views
0

これはおそらく本当に簡単な質問ですが、自分自身を取り組んだことはありません。Rails認証 - ネストされたモデルを作成する

私は、非常にうまく動作するプロジェクトをローカルでセットアップしましたが、私のモデルの認証を正しく設定する方法は考えられませんでしたが、私はユーザーに編集をさせたくありませんでしたユーザの詳細をそれぞれのモデルの詳細を同時に編集するようにしていますので、 'current_user.id'の値を含むモデルフォームに隠しフォームを入れて、常にログインしたユーザに保存するようにしました。このフォームの値は、ソースと任意のユーザーに再割り当てされたデータを介して何かに変更される可能性があります。

ユーザーに属するモデルを簡単にセットアップするための適切な方法は、前に見たように 'accepts_nested_attributes_for'の方法でユーザーの詳細を保存しなくても、そのユーザーに対して個別に作成/編集/このようなことで?

私はちょっと深く掘り下げて、これらのモデルをユーザーに関連付ける方法を理解していますが、モデルは完全に独立して動作し、ユーザーモデルのユーザーデータを保存する必要はありません。

データ構造例は次のとおりです。

ユーザー - >投稿支柱 - >投稿/コメントは、元のユーザーデータを変更することなく、削除、編集/追加することができ、電子メール/パスワードコメント認証のためだけに使用されます。

私は、オブジェクトの構造が非常に簡単になることができ感謝:

User:[{ 
    Posts:[{ 
     "name":"test", 
     "description":"test" 
     { 
     "name":"test2", 
     "description":"test2" 
     }] 
    }] 
}] 

しかし、この特定の例では、私は記事をポストすることをあることをそれぞれとの関係だけで、自分の意見を持つ別のモデルになりたいです問題の「Joe Bloggs」またはUserID 4によって作成されました。

私はちょうど私が理にかなっていることを確認したいと思います。

答えて

0

deviseを使用すると、ネストされた属性やフォームを作成せずに、認識して実際にこの関係を認識するコントローラの作成アクションに行を追加することができます。自動的にこれを行うのは、下の'@post.user = current_user 'の行です!モデルはまだ技術的にネストされていますが、元のフォームなどを変更してユーザーに正しくネストする必要がない場合は、ユーザーIDを渡すだけです。

すなわち

def create 
    @post = Post.new(params[:post]) 
    @post.user = current_user 
    respond_to do |format| 
    if @post.save 
     format.html { redirect_to @post, :notice => 'Post was successfully created.' } 
     format.json { render :json => @post, :status => :created, :location => @post } 
    else 
     format.html { render :action => "new" } 
     format.json { render :json => @snippet.errors, :status => :unprocessable_entity } 
    end 
    end 
end 
関連する問題