根据模型更改Rails部分的查找路径

Leo*_*Leo 2 ruby-on-rails ruby-on-rails-3

我目前有一些模板代码,如下所示:

render partial: 'reference', locals: { object: object }
Run Code Online (Sandbox Code Playgroud)

Rails _reference.html.erbapp/views/application/和中寻找局部app/views/controller_name/

但是,此视图位于独立的控制器中,与object呈现的对象无关,因此不会在对象的view目录中查找app/views/object。我不能使用标准render object语法,而让Rails自动确定局部路径,因为我不想呈现局部路径object/object,而是呈现局部路径object/reference

我该如何解决?

我在想:

  • 一种使用render object语法的方式,但是指定了不同的部分名称;要么
  • 一个使用不同方法来查找部分的帮助函数,其用法如下:

    render partial: find_partial('reference', object), locals: { object: object }
    
    Run Code Online (Sandbox Code Playgroud)

我尝试过的

我试图使用第二种方法:

def find_partial(name, object)
  lookup_context.find name, [object.class.model_name.plural, 'application'], true
end
Run Code Online (Sandbox Code Playgroud)

非常接近我想做的事,即找到正确的部分,application/reference如果没有,则退回通用。但是,它会找到实际的ActionView::Template,并且render期望使用字符串而不是实际的模板对象。也许有一种方法可以获取正确的字符串?还是渲染一个实际的模板?

小智 6

您可以覆盖to_partial_path模型中的方法,render会调用此方法来确定要为该模型渲染的部分路径。

例如在您的Model.rb中

def to_partial_path
  "references/#{kind}"
end
Run Code Online (Sandbox Code Playgroud)

参考:http : //cookieshq.co.uk/posts/rails-tips-to-partial-path/ http://apidock.com/rails/ActiveModel/Conversion/to_partial_path