如何添加自定义视图部分路径到Rails 4.2查找?

时间:2015-10-07 22:05:17

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

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

HAML:

#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试图避免冗余代码(例如,指定完整路径)。有没有办法避免传递完整的路径?

1 个答案:

答案 0 :(得分: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 => ud时,您的查找路径应如下(按顺序):

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