2012-07-31 71 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