我想了解性病是如何工作的,我有我的内容模型建立与邮政和第二十从它继承通用模型路径。轨道/ STI -
我也有一个评价模型。在评论控制器,我有这样的:
def find_content
@content = Content.find(params[:content_id])
end
显然,它不工作,因为PARAMS或者显示POST_ID或article_id的。我如何告诉评论控制器根据参数提取相关的content_id?
我想了解性病是如何工作的,我有我的内容模型建立与邮政和第二十从它继承通用模型路径。轨道/ STI -
我也有一个评价模型。在评论控制器,我有这样的:
def find_content
@content = Content.find(params[:content_id])
end
显然,它不工作,因为PARAMS或者显示POST_ID或article_id的。我如何告诉评论控制器根据参数提取相关的content_id?
速战速决可能是:
@content = Content.find(params[:post_id] || params[:article_id])
在你的参数应该是一个article_id
或post_id
。因此,您可以尝试捕获这两个参数,并将它们与逻辑或运算符(||
)结合使用。因此,您可以使用Content.find
的article_id或post_id。
params
# => {:article_id=>1, :other_parameter=>"value"}
params[:post_id] || params[:article_id]
# => 1
如果没有的参数你nil
和Content.find
失败并ActiveRecord::RecordNotFound
例外。没关系,我想。稍后,您将在控制器中解决此错误,以显示404页面。
当您使用单表继承你得到一个和唯一一个在这列“类型”表。所以,你的情况,你有表“内容”与“TYPE”列在其中存储的字符串之一:“后”或“物品”。
当你在你的Rails应用程序中使用STI你必须定义三种模式:内容(从ActiveRecord::Base
继承作为一个普通模式),邮政和文章(无论是从Content
继承),并对其直接操作,如:Post.find
,Article.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
异常。
当然,我的例子并不优雅,但我希望你明白了吧。