我正在用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板。
是的,我想到了这一点,但如果用户使用ex)firefox,将隐藏的只读变量更改为其他内容? – user482594 2010-10-27 23:04:56
如果它仍然是有效的类别ID,那么我不会看到问题。除非只有一些成员可以发布到某些类别。无论谁去改变这个隐藏的形式价值的麻烦显然都是无花果的。您可以检查控制器,以查看URL中类别的类别ID是否与隐藏输入中传递的ID匹配,如果不是这种情况,则不保存该文章。虽然我在RoR中已经足够绿了,不知道该怎么做。 – sholsinger 2011-03-24 00:04:39