Ruby渲染另一个控制器部分

时间:2013-06-15 23:27:00

标签: ruby ruby-on-rails-3 views

我有一个控制器,在索引视图中我试图从另一个控制器渲染局部。这是另一个控制器:

class ModelController < ApplicationController
def view 
    @model = Model.where('equipment_id' => params[:equipment_id])
    render :partial => 'view_model'

end
end

在索引视图中,我正在尝试这个:

<div id ="mdl-inner_box" class="inner_box">
<%= render "model/view", :@model => Model.first %>
</div>

我的部分观点是:

<% @model.each do |m| %>
<div> <%= m.name %> </div>
<% end %>

我收到此错误:

/ device

中的ActionView :: MissingTemplate

缺少部分模型/视图{:locale =&gt; [:en],:formats =&gt; [:html],:handlers =&gt; [:erb,:b

这样做的正确方法是什么? 感谢

1 个答案:

答案 0 :(得分:1)

真正解决这个问题的错误太多了!

首先,如果您要显示索引操作的代码,为什么它是视图操作?

  

我有一个控制器并且在索引视图中......

class ModelController < ApplicationController
  def view

  # should be

  def index

在您的索引视图中,大概是app/views/models/index.html.erb您渲染部分,指向app/views/model/_view.html.erb。这应该是models

<%= render "model/view", :@model => Model.first %>

<!-- should be -->

<%= render "models/view", :model => @model %>

在控制器中设置@model。您可以将Model.first放入视图本身,但我认为这会稍微破坏MVC模式。

最后在partial中,您访问类变量@model,从而无法将其作为本地传递。您还可以在其上调用.each,这是一种循环收集的方法,而不是单个记录。例如,您将执行@models.each而不会@model.each

<% @model.each do |m| %>
  <div><%= m.name %></div>
<% end %>

<!-- should be something like -->

<%= model.name %>

长话短说,在我看来你很丢失,所以在你继续之前我会从一本关于Ruby on Rails的好书开始。这是一个免费的:http://ruby.railstutorial.org/ruby-on-rails-tutorial-book?version=4.0