在has_many上的Rails控制器

时间:2012-08-02 00:24:18

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

这里我有3个模型

Customer           Book            Book_Manager
id                 id              id
first              description     customer_id
last               book_managers   visible
email
password

该协会已经跟随

class Customer < ActiveRecord::Base
  has_many :book_managers
  has_many :books, :through => :book_managers
end

class BookManager < ActiveRecord::Base
  belongs_to :customer
  has_many :books
end

class Book < ActiveRecord::Base
  belongs_to :book_manager
  def customer
    book_manager.customer
  end
end

现在,我可以通过以下

创建新客户并在rails控制台中创建新书
cust.book_managers.build :visible => true
cust.book_managers.first.books.build :description => 'the odyssey'
cust.save!

以这种方式查看

cust = Customer.find 1
cust.books
Book.first.customer

上面的代码在rails控制台中运行。但我需要让它在控制器中工作。它就像个人资料页面,客户进入客户#编辑并查看模型书籍。在那时,如果是第一次,或者如果之前存在某些内容,那么最后一本书将出现在文本字段描述中。我之前尝试过以下代码但是book_manager没有更新

@book = @customer.books.order("created_at DESC").first

如果修改或创建了文本字段,那么它将创建一个新的book_manager和books并具有正确的关联。另请注意,可见的布尔下拉菜单将允许true或false(如果可见)并在book_manager模型上进行修改。

对不起我的法语语法。

我有以下但似乎没有很好地工作

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

0 个答案:

没有答案