首先,如果您需要更多详细信息,请不要犹豫,我会尽量保持清晰。从三重嵌套实体检索结果时发生问题/错误数据
我创建了一个网站,允许用户创建mangas,创建3个脚手架:一个用于漫画本身,有许多章节,属于漫画,并且里面有很多页面。
为了获得更好的用户体验,我使用章节号和页码替换了URL中的ID,并使用FriendlyID在URL中包含漫画的名称,因此漫画第一章的第一页看起来像下面:localhost:3000/epic-manga/1/1
。由于所有的路由都是嵌套的,因此路由本身需要三个参数:'manga_id','chapter_number'和'page_number'。然而,我没有发现设置漫画变量的有用之处,因为我知道Rails知道我在说什么。然而,当我在纳入我的布局的页面,我意识到,Rails的是显示错误的结果:
private
#Peji stands for 'page' in japanese, don't ask
def set_peji
@chapter = Chapter.find_by(chapter_number: params[:chapter_id])
@peji = @chapter.pejis.find_by(scan_number: params[:id])
end
Rails的医生说那是find_by“将选择其研究相匹配的第一个项目。当我加载页面时,SQL请求如下所示:SELECT 'chapters'.* FROM 'chapters' WHERE 'chapters'.'chapter_number' = 1 LIMIT 1
。然而,每一个mangas至少有第一章。
我最大的问题是,我真的不知道如何设置“set_peji”功能将搜索范围限制到拥有该章节/页的漫画,所以我尝试了以下内容:
def set_peji
@manga = Manga.find_by(slug: params[:manga_id])
@chapter = @manga.chapters.find_by(chapter_number: params[:chapter_id])
@peji = @manga.chapters.pejis.find_by(scan_number: params[:id])
end
然而,我有这个错误,结果是:undefined method 'pejis' for #<Chapter::ActiveRecord_Associations_CollectionProxy:0x007fbe30667380>
,同时瞄准包含'@peji'的行(我试图用'@ chapter.pejis'替换'@ manga.chapters.pejis',但它给我一个错误的结果)
我没有任何其他想法,我愿意接受任何建议。
预先感谢您!
你是对的,我是如此接近它驱使我疯了!万分感谢! – Jaeger
@Jaeger欢迎编程和/或导轨。 10年后,我开始减少这些错误;) –
2年半,我很乐意让它接近功能代码:D – Jaeger