Rails:渲染命名空间的多态部分

nul*_*ull 1 namespaces ruby-on-rails view polymorphic-associations

我有一个叫做多态的模型Update.通常,我可以updatable使用简单的方法呈现其关联模型:

<%= render @update.updatable %>
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果我从命名空间控制器中调用此方法,那么Rails也会尝试命名视图路径,admin/reviews/review而不是搜索reviews/review.这导致如下错误:

Missing partial admin/reviews/review
Run Code Online (Sandbox Code Playgroud)

通常我可以硬编码变通方法,例如:

<%= render :partial => "/reviews/review", :locals => {:review => @update.updatable}
Run Code Online (Sandbox Code Playgroud)

如果关联不是多态的,那就没关系,但既然如此,如果updatable不是a ,我会得到错误Review.不幸的是,我有几十个可能的updatables,并通过case声明进行分支将很难维护.

我有没有想到更简单的方法?

bas*_*gys 5

您可以从模型中定义部分路径.它是这样的:

class Review
  def to_partial_path
    "/reviews/review"
  end
end
Run Code Online (Sandbox Code Playgroud)