rails如何呈现来自另一个控制器的页面

时间:2013-12-25 23:54:05

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

您好我正在尝试将视图从一个页面渲染到另一个寻呼机

我想在pages / companies_list中渲染公司/展示。所以我使用以下代码来做到这一点

in companies_list.html.erb

<%= render :partial => 'companyratings/show' %>

但它在我的配合/展示中显示错误 页 Pages#companies_list

中的NoMethodError
at 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

任何人都可以帮助如何做到这一点

3 个答案:

答案 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。