【问题标题】:How to add a custom view partial path to Rails 4.2 lookup?如何向 Rails 4.2 查找添加自定义视图部分路径?
【发布时间】:2016-01-05 07:59:18
【问题描述】:

我在 app/views/app1/users 中有一个类似于 this solution 的演示部分。我已经尝试在上述解决方案中使用 prepend_view_path,但无济于事。

哈姆:

#demonstration
= f.semantic_fields_for :demonstration do |ud|
  = render 'demonstration_fields', :f => ud

但我收到此错误:

Missing partial app1/_demonstration_fields, application/_demonstration_fields with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :haml]}. Searched in:

使其工作的唯一方法是将完整路径传递给渲染,如下所示:

= render 'app1/users/demonstration_fields', :f => ud

但这违背了试图通过 prepend_view_path 避免冗余代码(例如,指定完整路径)的目的。有没有办法避免在完整路径中传递?

【问题讨论】:

  • 那么为什么不将演示场移到可行的路径上呢?比如共享文件夹? shared/users/demonstration_fields
  • @miler350,在我的具体情况下,我实际上正在使用诸如“users_2014”之类的年份文件夹,并希望按年份分段 - 这是一个非常具体的设置。
  • 试试这一行 [= render partial: "app1/users/demonstration_fields"]

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

您可以覆盖 Rails 中每个控制器都混入的 ActionView::ViewPaths.local_prefixes 私有类方法。该方法上方的注释甚至说:

如果您想更改路径前缀以查找视图,请在控制器中覆盖此方法

“视图”,在这种情况下,也意味着部分。因此,您可以将以下内容添加到您的App1Controller

class App1Controller < ApplicationController
  def self.local_prefixes
    [controller_path, "#{controller_path}/users"]
  end
  private_class_method :local_prefixes
end

然后,当您render 'demonstration_fields', :f =&gt; ud 时,您的查找路径应如下所示(按顺序):

app1/_demonstration_fields,
app1/users/_demonstration_fields,
application/_demonstration_fields`

【讨论】:

    猜你喜欢
    • 2011-08-30
    • 1970-01-01
    • 2014-09-26
    • 2012-06-07
    • 2013-04-07
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多