2017-06-06 66 views
0

我有一個工作的部分爲我的Quote類的一個實例_quote.html.erb,我想用這個相同的部分來渲染索引操作提供的集合中的每個對象。但是,我陷入困境,無法再看到我出錯的地方。一個實例變量命名問題,控制器crud行動格式問題?下面的代碼:如何使用單個部分渲染集合中的每個對象?

quotes_controller.rb

class QuotesController < ApplicationController 
    before_action :authenticate_user!, only: [ :new, :create, :edit, :update, :destroy ] 
    # before_action :owners_only, only: [ :show, :edit, :index, :update, :destroy ] 

    def new 
    @quote = Quote.new 
    end 

    def create 
    # @quote = Quote.new(quote_params) 
    @quote = current_user.quotes.new(quote_params) 
    if @quote.save 
     redirect_to quote_url(@quote), notice: 'Quote request created' 
    else 
     render :new 
    end 
    end 

    def show 
    # @quote = Quote.find(params[:id]) 
    @quote = current_user.quotes.find(params[:id]) 
    end 

    def index 
    @quotes = current_user.quotes.all 
    end 

    def edit 
    @quote = current_user.quotes.find(params[:id]) 
    end 

    def update 
    @quote = current_user.quotes.find(params[:id]) 
    if @quote.update_attributes(quote_params) 
     redirect_to quote_path(@quote) 
    else 
     render :edit 
    end 
    end 

    def destroy 
    @quote = current_user.quotes.find(params[:id]) 
    @quote.destroy 
    redirect_to quotes_path 
    end 

private 

    def quote_params 
    params.require(:quote).permit(:gla, :prev_cover, :co_name, :co_number, :postcode, :industry, :lives_overseas, 
            :scheme_start_date, :payment_frequency, :commission_level) 
    end 
end 

_quote.html.erb

<section id="quote"> 
<div class="container"> 
<div class="row"> 
    <div class="col-md-4 text-center"> 
    <div class="panel panel-success panel-quote"> 
     <div class="panel-heading"> 
     <strong>GLA</strong> 
     </div> 
     <div class="panel-body text-center"> 
     <p><strong>Quote ID; <%= @quote.id %></strong></p> 
     </div> 

     <table class="table table-bordered"> 
     <tr> 
      <td>Company name</td> 
      <td><%= @quote.co_name %></td> 
     </tr> 
     <tr> 
      <td>Company number</td> 
      <td><%= @quote.co_number %></td> 
     </tr> 
     <tr> 
      <td>Office postcode</td> 
      <td><%= @quote.postcode %></td> 
     </tr> 
     <tr> 
      <td>Industry</td> 
      <td><%= @quote.industry %></td> 
     </tr> 
     <tr> 
      <td>Previous cover</td> 
      <td><%= @quote.prev_cover %></td> 
     </tr> 
     <tr> 
      <td>Lives overseas</td> 
      <td><%= @quote.lives_overseas %></td> 
     </tr> 
     <tr> 
      <td>Scheme start date</td> 
      <td><%= @quote.scheme_start_date %></td> 
     </tr> 
     <tr> 
      <td>Payment frequency</td> 
      <td><%= @quote.payment_frequency %></td> 
     </tr> 
     <tr> 
      <td>Commission level</td> 
      <td><%= @quote.commission_level %></td> 
     </tr> 
     </table> 
    </div> 
    </div> 
</div> 

index.html.erb

<% @quotes.each do |q| %> 
    <%= render :partial => "quote", :collection => q %> 
<% end %> 

我在做一件非常明顯的事情,有人可以爲我指出,一直盯着這麼久我再也看不到它了!

如果我運行:

<% @quotes.each do |q| %> 
    <%= q.co_name %> 
<% end %> 

索引頁面呈現co_name值就好了,顯示出收集並打通。

回答

2

我想這:

<% @quotes.each do |q| %> 
    <%= render :partial => "quote", :collection => q %> 
<% end %> 

可能是更多的東西是這樣的:

<% @quotes.each do |quote| %> 
    <%= render :partial => "quote", locals: {quote: quote} %> 
<% end %>  

,然後在局部,在頂部,這樣做:

<% @quote = local_assigns[:quote] %> 
<section id="quote"> 
<div class="container"> 
<div class="row"> 
    <div class="col-md-4 text-center"> 
    <div class="panel panel-success panel-quote"> 
     <div class="panel-heading"> 
     <strong>GLA</strong> 
     </div> 
     <div class="panel-body text-center"> 
     <p><strong>Quote ID; <%= @quote.id %></strong></p> 
     </div> 

     <table class="table table-bordered"> 
     <tr> 
      <td>Company name</td> 
      <td><%= @quote.co_name %></td> 
     </tr> 
     ... 
     </table> 
    </div> 
    </div> 
</div> 

那我想你會在路上。

+0

謝謝#jvillian,完美的工作,幫助我擺脫了迷失,幫助我看到了我需要更好理解的東西,即部分,傳遞它們的參數和變量。 – jbk