2010-10-27 73 views
1

我正在用rails3上的ruby製作一個簡單的BBS系統。Rails 3模型協會

3個主要模式是會員/分類/文章。

文章屬於會員/類別,(db表中的member_id/category_id列) 和每個成員/類別'has_many'文章。

當特定用戶試圖寫一篇文章,我試圖通過它

def new 
    @article = current_member.articles.new 
end 

,並且當沒有任何形式的輸入或任何被創建的製品自動填充在member_id部分。

現在,我應該怎麼做,如果我想自動填充文章的category_id列? 我相信每個數據相關的工作都應該在模型中完成。不過,我傳遞:類別值通過URL

例如,

本地主機:3000 /用品/ QNA /新

將意味着物品應具有2 CATEGORY_ID(假設有ID類別= 2有name = qna,同樣,我做了路由作業,我可以成功地從params [:category]中獲得'qna')。

我應該使用

def create 
    current_member.articles.build(:category => get_category_id_from_name(params[:category])) 
end 

?但是沒關係?因爲我相信因爲模型不能訪問params變量,所以控制器必須完成上述工作,那不是'rails方式' 我不想使用嵌套表單,因爲我不希望用戶在寫入時選擇一個類別。它就像是一個QnA板,如果用戶點擊'寫'按鈕,這意味着用戶正在寫一個QnA板。

回答

1

最簡單的方法是在創建Article實例的表單上添加兩個隱藏字段,然後將「category_id」和「member_id」的值分配給這些隱藏字段。

Rails會自動將這些參數拖入params哈希中,並且它們會在您調用Article.new時自動結束。

+0

是的,我想到了這一點,但如果用戶使用ex)firefox,將隱藏的只讀變量更改爲其他內容? – user482594 2010-10-27 23:04:56

+1

如果它仍然是有效的類別ID,那麼我不會看到問題。除非只有一些成員可以發佈到某些類別。無論誰去改變這個隱藏的形式價值的麻煩顯然都是無花果的。您可以檢查控制器,以查看URL中類別的類別ID是否與隱藏輸入中傳遞的ID匹配,如果不是這種情況,則不保存該文章。雖然我在RoR中已經足夠綠了,不知道該怎麼做。 – sholsinger 2011-03-24 00:04:39