2014-02-28 47 views
0

我已經離開編程八個月了,我正在嘗試重新學習關於開發Rails應用程序的知識。Rails:當前Devise用戶對Shoehorn的評論創建

我重新做了Getting Started tutorial以幫助自己恢復速度(可視化烏龜),然後嘗試創建原創內容。

我能夠成功地將graft Devise納入測試應用以及the modification where it can take a username or an e-mail address

現在我試圖實現用戶對帖子和評論的所有權。對於文章,我運行命令:

rails g migration AddUserToPosts user:references 

和類似的評論。簡單。並添加當前用戶到一個新的職位是不在話下,只是需要在帖子控制器的一個新的生產線,因爲我能做到這一點的實例化和儲蓄之間:

def create 
     @post = Post.new(post_params) 
     @post.user = current_user #new 
     if @post.save 
      redirect_to @post 
     else 
      render 'new' 
     end 
    end 

但對於評論,我很爲難。這是我正在看的,在評論控制器中:

def create 
     @post = Post.find(params[:post_id]) 
     @comment = @post.comments.create(params[:comment].permit(:commenter, :body)) 
     #@comment.user = current_user 
     redirect_to post_path(@post) 
    end 

我想讓我的用戶進入註釋創建莫名其妙。那裏的註釋嘗試並沒有讓作品蒙上陰影,但它也沒有做任何事情,因爲評論被保存到被調用的.create方法中的數據庫中。

所以是的,所有這些要求一個非常簡單的問題。預先感謝您的耐心等待!

回答

1

問題是,在你的第二個例子中,你打電話create而不是new

create = new + save

要保存分配current_user之前的評論。

您可以先用new,僅分配current_user後節能解決這個問題:

@post = Post.find(params[:post_id]) 
@comment = @post.comments.new(params[:comment].permit(:commenter, :body)) 
@comment.user = current_user 
@comment.save 

而且,在你的第一個例子,有一種更好的方式來創建一個帖子:

@post = current_user.posts.new(post_params) 
if @post.save 
... 
+1

我做改變爲更好(好,一行!)的方式來創建一個帖子。這對我沒有意義,但是如果我考慮用戶有帖子,並且通過用戶調用「創建新帖子」會自動創建我需要的關聯。這也正是評論所發生的事情......有意義的是,通過郵政發表評論也會使聯想成爲可能。 –

0

使用.new而不是.create,然後只需使用@comment.save手動保存該對象。

我建議你切換到.new的原因是它只會在內存中創建對象。它不會嘗試訪問數據庫。如果您使用.create,然後.save,那麼您將觸碰數據庫兩次。這會有點低效。