2012-07-31 109 views
0

紅寶石我有3種型號:局部視圖on Rails的

  • 客戶
  • book_manager

customer可以編輯自己的場合,比如用戶信息帳戶。但是,它呈現不同的模型,例如book。爲此,我決定渲染文件book/form已遵循<% render book/form %>

當配置文件頁面加載時,如果以前沒有寫任何內容,則客戶可以在書籍部分查看任何內容,或者如果他之前已經寫了某些內容,則可以是任何內容。在客戶控制器的網頁我有下面的代碼來獲取信息:

def edit 
    @book = current_customer.books.order("created_at DESC").limit(1) 
end 

books/_form.html.erb我有那麼下面:

<%= form_for(@book) do |f| %> 
    <% if @book.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2> 

     <ul> 
     <% @book.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 
    <div class="field"> 
    <%= f.label :description %><br /> 
    <%= f.text_field :description %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

book控制器edit,我什麼都沒有或應從何處把我的命令@book,讓他們可以說話?

我有以下錯誤:

NoMethodError in Customers#edit 

Showing /home/jean/rail/map/app/views/books/_form.html.erb where line #1 raised: 

undefined method `model_name' for ActiveRecord::Relation:Class 
Extracted source (around line #1): 

1: <%= form_for(@book) do |f| %> 
2: <% if @book.errors.any? %> 
3:  <div id="error_explanation"> 
4:  <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2> 

回答

0

你在你的代碼

@book = current_user.books.order("created_at DESC").limit(1) 

這確實會回報至少有一個簡單的錯誤最新的書,但它會以數組形式返回它。

而不是調用limit(1)你應該使用的方法first

@book = current_user.books.order("created_at DESC").first 
+0

謝謝,我有一個問題,什麼是最好的,如果它的空?導致我的新錯誤是未定義的方法'模型名稱爲NilClass:類 – Jseb 2012-07-31 14:49:39

+0

正常的做法是在'新'行動'編輯'''行動做'@book = current_user.books.build'做'@book = current_user.books .find(PARAMS [:ID])'。在這兩種情況下,「form_for @ book」都可以正常工作。也許你應該嘗試類似的東西。 – 2012-08-01 08:58:01

1
<% render book/form.html.erb %> 

應該

<%= render '/books/form' %> 
+0

哎呀呀,謝謝,那我把它寫下來的論壇,我的壞編輯 – Jseb 2012-07-31 14:50:06

相關問題