2012-03-20 47 views
0

這可能是一個非常簡單的問題,但我從來沒有完全搞清楚自己對於rails還是比較新的。Rails身份驗證 - 設計嵌套模型

我已經在本地設置了一個項目的設計,工作得很好,但是當時我想不出一種方法來正確設置我的模型的身份驗證,我不希望用戶必須編輯用戶細節同時編輯它們各自的模型細節,因此我在模型表單中放置了一個隱藏表單,其中包含'current_user.id'的值以確保它始終保存到登錄用戶 - 但顯然我已經意識到該表格的價值可以通過來源以及任何重新分配給任何用戶的數據更改爲任何內容。

什麼是合適的方式來輕鬆設置屬於用戶的模型,這些用戶可以獨立創建/編輯/刪除等,而不必將用戶的詳細信息保存在我之前見過的'accep_nested_attributes_for'方式中像這樣的事情?

我想我只是想深入挖掘並理解如何將這些模型與用戶相關聯,但這些模型完全獨立工作,不需要保存用戶模型中的用戶數據。

一個例子的數據結構是:

用戶 - >帖子帖子 - >評論其中帖/註釋可以被添加/編輯刪除,而無需改變原來的用戶數據,電子郵件/密碼僅用於身份驗證目的。

我很欣賞的對象結構可以很容易爲:

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

但在這個具體的例子我想帖子是在每個和唯一的關係,自己的意見單獨的一個模型是該職位有問題是由「Joe Bloggs」或用戶ID 4創建的。

在此先感謝各位,併爲漫談道歉,只是想確保我有道理!

回答

0

使用設計,你可以簡單地添加一行到設計控制器中的創建操作,它可以識別並實際爲你做這種關係,而無需創建嵌套的屬性或表單。這是'@post.user = current_user'一行,它自動地做到這一點!因此,如果您願意,模型仍然在技術上嵌套,但您不必更改任何原始表單等,以便讓它們正確嵌套到用戶,它只會傳遞用戶標識。

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