2012-08-01 65 views
0

我使用的是不工作,在回顧#新的動作部分觀點,我有一個從和我打電話後局部視圖:未定義的方法`MODEL_NAME」的陣:類,部分觀點

<%= form_for @review do |f| %> 

    <div> 
    <%= field_with_error @review, :content do %> 
    <%= f.label :content %><br /> 
    <%= f.text_area :content %> 
    <% end -%> 
    </div> 

    <%= field_with_error @review, :score do %> 
    <%= f.label :score %> 
    <%= f.text_field :score %> 
    <% end -%> 

    <p><%= submit_tag 'Post Review'%> </p> 
    <% end %> 
    </div> 

    <ul > 
    <%= render :partial => "post", :locals => {:review => @reviews} %> 
    </ul> 

回顧#新的控制器:

def new 
     @review = Review.new(:restaurant_id => params[:restaurant_id]) 
     @reviews = Review.all 
    end 

和審查#彥博的樣子:

<%= content_tag_for(:li, review) do %> 
    <p ><%= "#{review.first_name}" %></p> 
    <p ><%= review.content %></p> 
    <span >Posted at <%= review.created_at %> ago. 
    (<%= link_to 'Delete', post, :confirm => 'Are you sure?', :method => :delete %>)</span> 
<% end %> 

它給出了一個錯誤:

undefined method `model_name' for Array:Class 

我想我做某事錯的局部視圖,謝謝你提前:)

回答

0

在你看來,你有:

<ul > 
    <%= render :partial => "post", :locals => {:review => @reviews} %> 
</ul> 

你傳遞@reviews這裏是一個數組,而不是型號@review。在@reviews的末尾刪除s,這應該起作用。 :)

編輯:如果你想呈現@reviews的所有評論列表,你可以做這樣的事情:

<ul > 
    <%= render :partial => "post", :collection => @reviews %> 
</ul> 

檢查documentation on partials關於如何做到這一點更多的選擇。

+0

非常感謝您的回覆:),我嘗試了第二個評論,它仍然給我同樣的錯誤:未定義的局部變量或方法'審查'爲#<#:0x13246f838> – GoodOne 2012-08-01 19:50:53

+0

抱歉,是我的錯。從文檔中:「當一個部分被複數集合調用時,那麼該部分的單個實例可以通過一個以部分*命名的變量來訪問正在呈現的集合的成員*。」所以它尋找一個名爲'post'的變量,因爲你的部分文件被命名爲'_post'。你可以改變文件名'_review'?無論如何,這將更有意義。 – 2012-08-01 21:53:52

相關問題