我有一个控制器,在索引视图中我试图从另一个控制器渲染局部。这是另一个控制器:
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
这样做的正确方法是什么? 感谢
答案 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