Ruby on rails ActionView::Template::Error(未定义的方法`each';用于nil:NilClass):?
我在ruby on rails项目中有一个服务模型,但我无法在项目的主页视图中呈现它,我得到了一个未定义的方法'each',用于nil:NilClass,尽管我在Servicecontroller中定义了变量- 我的ServicesController文件-Ruby on rails ActionView::Template::Error(未定义的方法`each';用于nil:NilClass):?,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,我在ruby on rails项目中有一个服务模型,但我无法在项目的主页视图中呈现它,我得到了一个未定义的方法'each',用于nil:NilClass,尽管我在Servicecontroller中定义了变量- 我的ServicesController文件- class ServicesController < ApplicationController def show @services = Service.all end end class-ServicesCont
class ServicesController < ApplicationController
def show
@services = Service.all
end
end
class-ServicesController
我的节目档案-
<div class="container">
<h3>Services we offer-</h3>
<% @services.each do |service| %>
<h5><%= service.name %></h5>
<p><%= service.description %></p>
<% end %>
</div>
我们提供的服务-
我的show file of services视图的路径是-app\views\services\\u show.html.erb
,我将它呈现在我的页面视图app\views\pages\home.html.erb
中,作为
,尽管我能够使用@services=Service.all命令查看rails控制台中的所有服务,但我仍然收到错误
有人能帮我一下吗?您在错误的控制器和操作中设置了变量 如果希望
@services
实例变量在home.html.erb
视图中可用,则需要在PagesController\home
中设置该数据
如果您在正确的操作中设置了变量,然后在主视图
中渲染一个分部,beit\u show
或另一个分部,您将能够访问该变量
尝试以下方法:
class PagesController < ApplicationController
...
def home
@services = Service.all
end
end
class PagesController
您在错误的控制器和操作中设置了变量
如果希望@services
实例变量在home.html.erb
视图中可用,则需要在PagesController\home
中设置该数据
如果您在正确的操作中设置了变量,然后在主视图
中渲染一个分部,beit\u show
或另一个分部,您将能够访问该变量
尝试以下方法:
class PagesController < ApplicationController
...
def home
@services = Service.all
end
end
class PagesController
如果要设置实例变量@services=Service.all
当请求由PagesController\home
处理时,您需要在该方法中实际设置实例变量。在另一个控制器中设置实例变量完全没有任何作用。rails中的show
显示一条记录<代码>索引对应于一组记录。谢谢你,它起作用了,我移动了@services=Service。所有这些都在我的页面中,它起作用了。谢谢如果您想设置实例变量@services=Service.all
当请求由PagesController\home
处理时,您需要在该方法中实际设置实例变量。在另一个控制器中设置实例变量完全没有任何作用。rails中的show
显示一条记录<代码>索引对应于一组记录。谢谢你,它起作用了,我移动了@services=Service。所有这些都在我的页面中,它起作用了。谢谢谢谢,我还有一个问题,如果我不想将我的显示文件命名为“\u show.html.erb”,而是想将其命名为“show.html.erb”,那么如何呈现这样的文件呢?如果这是一个局部视图(将在另一个视图中呈现的视图的一部分),则按照惯例,将其命名为以\u
开头。在这种情况下,将其命名为show
可能不是一个好主意,因为这是ServicesController#show
操作在尝试呈现其关联视图时将搜索的名称。谢谢,我还有一个问题,如果我不想将我的显示文件命名为“\u show.html.erb”,而是希望它命名为“show.html.erb”,那么如何渲染它呢?如果这是一个局部视图(将在另一个视图中渲染的视图的一部分),则按照惯例,将其命名为以开头。在这种情况下,调用它show
可能不是一个好主意,因为这是ServicesController#show
操作在尝试呈现其关联视图时将搜索的名称。