【问题标题】:rails: show nested resource on main resource pagerails:在主资源页面上显示嵌套资源
【发布时间】:2013-09-12 14:29:22
【问题描述】:

不确定我是否会正确描述这一点:

我有一个“节目”资源和一个“剧集”资源;一个节目可以有很多集。我还有一个节目页面,我在其中列出了该节目下的剧集,并且(希望)在节目页面的顶部有一个视频播放器。我还应该注意,我使用的是friendly_id。

理论上,我想在 ajax 中完成这一切,但我只是想了解 rails 和 pushState /history 的东西。

现在我已经完成了所有“工作”,其中一个节目列出了剧集,当点击时,我进入了友好 ID 工作的嵌套剧集页面(即 show/first-show-title/episode/episode-one-title ) .

我最终想要的是每一集都有自己的网址,但会显示在节目页面本身 - 即参数是由节目控制器拾取的,并且正确的视频会部分加载剧集视频。

当然,我可以模拟剧集页面,使其看起来像节目页面,并让每一集都“显示”(这就是我现在要做的,直到我弄清楚这一点)但现在还不是 DRY 是吗?

【问题讨论】:

    标签: ruby-on-rails resources routes nested


    【解决方案1】:

    您不必为某些控制器操作使用同名模板。 在您的 EpisodesController 中,只需像这样呈现节目页面

    def show
        # do stuff, load episode
        render 'shows/show'   # instead of the default 'episodes/show'
    end
    

    您只需要确保满足其他模板的所有参数要求。使用其他 if 条件来显示所选剧集是否存在。


    另一个建议是将该 url 与 ShowsController#show 操作相匹配,并处理其中是否存在剧集参数。

    def show
        if params[:episode_title]
            # load episode
        else
            # load other stuff to show overview
        end
    end
    

    虽然我不知道friendly_id,所以我不知道如何指定该路线。一般来说,第一种方法会更干净,因为它清楚地将控制器分开而不是将它们混合在一起。

    【讨论】:

    • 摇摆——这对我来说已经足够了;只是我可以将它翻转到另一个模板的事实太棒了。谢谢!对 Rails 完全陌生,但在做了 16 年程序员后发现它呼吸了新鲜空气;我最大的“问题”不是认为有简单的方法。
    • 实际上尝试了这个但得到了错误:缺少模板情节/节目/节目,应用程序/节目/节目与{:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee, :arb]}。在以下位置搜索:*“/Users/grimm/Documents/__WORK/RAILS/batterypopv2/app/views”*“/Users/grimm/Documents/__WORK/RAILS/batterypopv2/vendor/bundle/ruby/1.9.1/bundler/gems /rich-53dba32858cb/app/views"
    • 嗯,原来render 'shows/show' 将它传递给了控制器。谢谢!
    • 啊,太好了,你自己找到了。我对此有点不确定并添加了 :action 参数。好像是错的;)(在回复中修复)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多