想要创建新的书籍实例而不是更新

时间:2012-08-01 13:55:06

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

我想要的是创建个人资料页面,我可以在其中查看上一个书籍字段,如果客户更改了文本,那么它将创建新书。

我有以下带有has_many关系的模型

Customer -- ID, First, Last, Email
Book -- ID, Description
Book_Managers -- ID, Customer_id, Book_id, Visible

现在我所拥有的是一个客户编辑,它允许我通过从书籍,电话等更多模型中呈现来看到多个表单......

这是我的客户控制器

def edit
  @customer = Customer.find(params[:id])
  if @customer.books.any?
    @book = @customer.books.order("created_at DESC").first
  else
    @book = @customer.books.build
  end
end

我想看到的是,如果我在预订表单时创建了一个新实例,我应该看到最后一个并且能够将“The JavaScript Bible”修改为“The Java Bible”并且它不会更新它而只是创建一个新版本。现在,当我去表格书时,我什么也看不见。如果我出于某些奇怪的原因,它只允许我更新。

 class BooksController < ApplicationController
   def create
     @book = current_customer.books.build(params[:book])
     if @book.save
       flash[:success] = "Book Created"
       redirect_to root_url
     else
       render 'customer/edit'
     end
   end

   def index
     @books = Book.all
   end

   def destroy
     @book.destroy
     redirect_to root_url
   end
 end

增加了这个

def update
 @book = current_customer.books.build(params[:book])
 if @book.save
   flash[:success] = "Book Updated"
   redirect_to root_url
 else
   render 'customer/edit'
 end

对于我的图书管理员,现在唯一的问题是我的协会,我似乎无法找到当前客户的任何书籍。我的查询有问题吗?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您可以这样做:

def update
  params = params[:book].merge(:previous_version => params[:id])
  @book = current_customer.books.create(params[:book])
end

它将在每次更新时创建一本新书。最后一个版本将是没有“previous_version”的书。