0

我想了解性病是如何工作的,我有我的内容模型建立与邮政和第二十从它继承通用模型路径。轨道/ STI -

我也有一个评价模型。在评论控制器,我有这样的:

def find_content 
    @content = Content.find(params[:content_id]) 
end 

显然,它不工作,因为PARAMS或者显示POST_ID或article_id的。我如何告诉评论控制器根据参数提取相关的content_id?

回答

1

速战速决可能是:

@content = Content.find(params[:post_id] || params[:article_id]) 

在你的参数应该是一个article_idpost_id。因此,您可以尝试捕获这两个参数,并将它们与逻辑或运算符(||)结合使用。因此,您可以使用Content.find的article_id或post_id。

params 
# => {:article_id=>1, :other_parameter=>"value"} 

params[:post_id] || params[:article_id] 
# => 1 

如果没有的参数你nilContent.find失败并ActiveRecord::RecordNotFound例外。没关系,我想。稍后,您将在控制器中解决此错误,以显示404页面。

1

当您使用单表继承你得到一个和唯一一个在这列“类型”表。所以,你的情况,你有表“内容”与“TYPE”列在其中存储的字符串之一:“后”或“物品”。

当你在你的Rails应用程序中使用STI你必须定义三种模式:内容(从ActiveRecord::Base继承作为一个普通模式),邮政和文章(无论是从Content继承),并对其直接操作,如:Post.findArticle.last

因为这两个帖子和文章是他们每个人的同桌“内容”的行始终具有鲜明的ID。我不知道你的应用程序的逻辑和你试图达到什么目标(例如,我不明白Post和Article之间的逻辑差异应该是什么),但是我建议从你的例子中实现这个动作:

def find_content 
    @content = Post.find_by_id(params[:content_id]) || Article.find_by_id(params[:content_id] 
end 

我用.find_by_id.find因为第二会提高你需要处理/抢险第一返回nil异常。

当然,我的例子并不优雅,但我希望你明白了吧。