0

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

我有以下具有 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

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

 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

结尾

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

4

2 回答 2

1

有一些用于版本控制的宝石。这就是:https ://www.ruby-toolbox.com/categories/Active_Record_Versioning

于 2012-08-01T14:28:23.433 回答
0

你可以这样做:

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

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

于 2012-08-01T14:55:06.453 回答