0

我有3個基本模型:文章,評論和用戶。目前,評論嵌套在文章中,但文章的所有評論都顯示在文章展示頁面上。 我的問題是評論應該屬於用戶和文章。現在,在我的comments_controller的創建操作中,很難同時執行2個構建操作。我基本上要既是Rails 3 - 多態協會唯一的選擇?

@comment = @article.comments.build(params[:comment]) 

@comment = @user.comments.build(params[:comment]) 
我comments_controller同創建行動

。如果我沒有錯,當然你不能同時執行兩行。至少它不會做我想要的。

在我的評論中,我想調用評論的用戶信息來獲取user_name和他的頭像。我可以一個USER_NAME列添加到我的意見表,並處理與

@user = current_user 
    @comment = @article.comments.build(params[:comment]) 
    @comment.user_name = @user.name 

但這是有點笨拙,得到的複雜,當我想通過回形針插件,顯示評論的用戶的化身。

爲用戶和文章模型的「可評論」界面使用多態關聯構建2條關聯評論(包含文章和用戶)的唯一可能方式?我覺得即使這樣做並不是真正的邏輯清潔,因爲用戶並不真正評論,而只是發表評論。當然,這種邏輯的缺乏對於應用程序來說不會是一個問題,但是在我看來,除了一個模型以外,還有其他解決方案嗎? 任何幫助表示讚賞!謝謝!

回答

0

評論模型應該包含article_id和user_id的列。 嘗試把一個隱藏字段在您的form_for:

<%= f.hidden_field(:comment_id, :value => @comment.id) %> 

然後當你調用@comment = current_user.comments.build(params[:comment])它應該得到傳承下去。然後你可以撥打@comment.user.user_name

+0

一般來說,我會同意這種做法,但user_id我認爲是一個太敏感的信息,以至於把它放在一個隱藏的領域。有人可以很容易地通過改變該ID通過螢火蟲或其他用戶評論。我昨天有這個想法,但作爲用戶登錄進行檢查,用螢火蟲操縱隱藏字段中的user_id,實際上我能夠以任何我想要的用戶的方式發表評論。只有隱藏字段應該用於沒人願意操縱我想的屬性。 –

+0

是的。那麼你可以從另一側解決它。我會更新我的答案。 – evanbikes

+0

我認爲這是一個好主意。所以做一個'@comment = @ user.comments.build(params [:comment])'並通過隱藏字段創建文章關聯是沒有問題的,因此沒有興趣操縱它。 –