【问题标题】:Rails is Looking for a Partial in the Wrong DirectoryRails 在错误的目录中寻找部分内容
【发布时间】:2013-03-30 21:27:21
【问题描述】:

我有一个多态的Review 模型。命名空间模型User::Library::Publication 是可审查的。评论是正确创建的,但是当我尝试通过部分显示它们时,Rails 会查找错误的目录。

在我看来:

<%= render @review %>

我收到此错误:

Missing partial user/library/reviews/review with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder]}

Rails 显然是在命名空间的目录 views/user/library 而不是 /views/reviews 中寻找审查部分。知道为什么会这样吗?

【问题讨论】:

  • 只是为了让我们理解您的问题,您希望它看起来在哪里?
  • /views/reviews/_review.html.erb.
  • 你的控制器也有命名空间吗?
  • 它是:User::Library::PublicationsController
  • 这就是为什么 rails 在命名空间目录中寻找你的部分。

标签: ruby-on-rails namespaces partials


【解决方案1】:

如果要从部分模板路径中删除命名空间,可以在 config/application.rb 中设置 prefix_partial_path_with_controller_namespace 变量:

# config/application.rb
config.action_view.prefix_partial_path_with_controller_namespace = false

这将加载您定义的部分路径(没有命名空间)。

你可以see the original Pull Request here

【讨论】:

    【解决方案2】:

    如果您使用名称空间,则必须创建文件夹/子文件夹,这样 Rails 才不会找错地方。

    如果你想强制使用部分路径,只需使用:

    render :partial => "review"
    

    并创建将review.html.erb 文件重命名为_review.html.erb

    【讨论】:

    • 简单地渲染:partial =&gt; "review" 似乎并不能解决问题。只有当我非常具体时,我才会成功:render :partial =&gt; "/reviews/review", :locals =&gt; {:review =&gt; @review}
    • 没有那么多信息我只能给出一个方向,但如果你估计我的答案不正确......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2020-04-15
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多