我本地环境中的所有内容都可以正常工作,但是在heroku上的生产中,ajax链接会在虚荣网址上呈现内容。 /t/tags
代替/atags/1
呈现有关缺少ID的错误:
ActionView::Template::Error (No route matches {:action=>"show", :controller=>"atags", :id=>nil} missing required keys: [:id]):
这更没意义,因为如果我导航到' / t / tags'例如,页面加载正常。因此,路线上的ajax被破坏,而通过常规渲染视图的相同路线是有效的。
在开发和生产环境之间可能导致此错误和差异的原因是什么?
我检查了heroku和本地的路线,它们是相同的。
呈现视图的js是:$("#tag_posts").html("<%= escape_javascript(render @atag) %>");
所以我想知道它是否与@atags路径在生产中由于某种原因而被不同地解释有什么关系?
破坏的链接正在构建:
link_to(piece.downcase, atag_path(Atag.find_by(tag:piece[1..-1].downcase)),
:class => 'post_hashtag', :remote => true, :onclick => "location.href='#top'")
由相同代码构造的这些链接在生产中正常工作,在渲染常规页面时减去remote:true
和:onclick => "location.href='#top'"
。
link_to(piece.downcase, atag_path(Atag.find_by(tag:piece[1..-1].downcase)),
:class => 'post_hashtag')
再次注意,这两种类型的链接在开发中都可以正常工作,只有后者在生产中才能正常工作。任何洞察这种奇怪的事情都会非常感激!
谢谢!
编辑:我想我几乎把它缩小了。在show我定义的atags控制器中:@atag = Atag.find_by_tag(params[:id])
我在哪里/如何为其他视图制定等效定义?这可能会解决生产中的问题。谢谢!
答案 0 :(得分:0)
在手边的方法中piece[1..-1]
是标记,路线的基础是/t/
,因此将atag_path(Atag.find_by(tag:piece[1..-1].downcase))
更改为"/t/" + piece[1..-1]
解决了问题,因为它直接通过了路由作为字符串。此外,它比返回数据库找到路线要快得多。
我不确定/好奇为什么它在当地很好但不在生产中。