您好我正在尝试将视图从一个页面渲染到另一个寻呼机
我想在pages / companies_list中渲染公司/展示。所以我使用以下代码来做到这一点
in companies_list.html.erb
<%= render :partial => 'companyratings/show' %>
但它在我的配合/展示中显示错误 页 Pages#companies_list
中的NoMethodErrorat undefined method `each' for nil:NilClass
这是我在companyratings / show中的内容
<title>Shared Todo App </title>
<h1>Shared Todo App</h1>
<p>All your todos here</p>
<table border="3">
<tr>
<th>Name</th>
<th>place</th>
<th>Rating</th>
<th>Rank</th>
</tr>
<% @companies.each do |companies| %>
<tr>
<td> <%= companies.name%> </td>
<td><%= companies.place%></td>
<td><%= companies.rate%>%</td>
<td><%= companies.rank%></td>
</tr>
<% end %>
</table>
这是我的companies_list文件
<% if signed_in? %>
<div class="row">
<aside class="span4">
<section>
<%= render 'shared/user_info' %>
<%= render :partial => 'companyratings/show' %>
</section>
</div>
<% else %>
<%end%>
这是公司的控制器
class CompanyratingsController < ApplicationController
before_action :signed_in_user, only: [:create, :destroy]
before_action :correct_user, only: :destroy
def index
@companies = Companyrating.all
@companyrating = Companyrating.new
end
def show
@companyrating = Companyrating.new
@companies = Companyrating.all
end
def create
@companies = Companyrating.new(params[:companyrating])
if @companies.save
flash[:success] = "Welcome to My Space!"
redirect_to :action => 'index'
else
flash[:error] = "Can't create companyrating."
render 'index'
end
end
private
def new_company_rating
params.require(:company_rating).permit(:name, :place, :rate, :rank, :user_id)
end
def correct_user
@companies = current_user.companies.find_by(id: params[:id])
redirect_to root_url if @companyrating.nil?
end
end
这是我的页面控制器的控制器代码
class PagesController < ApplicationController
def companies_list
@title = "companies_list"
if signed_in?
@companies_mines = current_user.companies_mines.build
end
end
end
任何人都可以帮助如何做到这一点
答案 0 :(得分:0)
这是由于您可能没有在负责呈现@companies
文件的方法中设置companies_list
变量。
在您向我们提供控制器代码之前,我们无法告诉您更多信息。
答案 1 :(得分:0)
您需要手头有@companies
并将其与locals
一起传递。然后引用局部变量。
http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials
查看3.4.6局部变量
答案 2 :(得分:0)
你正确的做法,但为了解决这个错误,你必须做一些以下的改变。
因为你有def companies_list
在您的页面控制器中,此处没有@companies
的实例,因为您已在部分('companyratings / show')中使用过。
发生错误是因为您没有发送任何@companies
作为区域设置,并且您已使用循环认为它。
所以在def companies_list中添加@companies实例并将其作为locales发送到像
这样的部分<%= render :partial => 'companyratings/show', locals=>{:companies => @companies } %>
并使用公司实例代替@companies。