一个控制器渲染使用其他控制器的看法(One controller rendering using a

2019-06-23 13:49发布

我有QuestionController我现在有AnotherQuestionController与应渲染使用模板和谐音在app /视图/问题的行动/这可能吗? 好像是应该的。

我试过了

render :template => "question/answer"

但answer.html.erb包括谐音,我得到这样的错误

“缺少模板another_question / _my_partial.erb鉴于路径”

那么,有没有办法告诉Rails“治疗AnotherQuestionController仿佛它QuestionController,寻找意见和谐音在app /视图/问题”? 或将我要创建的应用程序/视图/ another_question - 这将导致重复(这不可能是Rails的方式)。

谢谢

Answer 1:

模板渲染应实际工作

 render :template => "question/answer"

您遇到的问题是找错了地方的谐音。 解决方法是简单,只要让你的谐音任何共享模板绝对的。 例如,问题/ answer.html.erb应该有

<%= render :partial => 'question/some_partial' %>

而不是通常的

<%= render :partial => 'some_partial' %> 


Answer 2:

你可以实现它:

render 'question/answer'


Answer 3:

你可以尝试inherit_views插件( http://github.com/ianwhite/inherit_views/tree/master )我在回答中提到这里这个问题 。



Answer 4:

Rails使用前缀列表来解决模板和谐音。 虽然你可以明确地指定一个前缀(“提问/回答”),作为另一个答案建议,这种做法会如果模板本身包括对其他谐音不合格引用失败。

假设你有一个ApplicationController的父类,并从QuestionController它继承,那么地方Rails会查找模板,以“应用程序/意见/问题/”和“应用程序/视图/应用/”。 (实际上它也将看在一系列的视图路径也一样,但我粉饰,为了简单的缘故。)

考虑以下几点:

class QuestionController < ApplicationController
end

class AnotherQuestionController < ApplicationController
end

QuestionController._prefixes
# => ["question", "application"]
AnotherQuestionController._prefixes
# => ["another_question", "application"]

解决方案#1。 放置局部“应用/视图/应用/”而不是“应用程序/视图/问题/”,在那里将提供给两个控制器下。

解决方案#2。 如果合适的话,从QuestionController继承。

class AnotherQuestionController < QuestionController
end
=> nil
AnotherQuestionController._prefixes
# => ["another_question", "question", "application"]

解决方案#3。 定义类方法AnotherQuestionController :: local_prefixes

这在Rails的4.2增加。

class AnotherQuestionController < ApplicationController
  def self.local_prefixes
    super + ['question']
  end
end
AnotherQuestionController._prefixes
# => ["another_question", "question", "application"]


文章来源: One controller rendering using another controller's views