0

I want to edit a 3 model on has_many. My question is about the controller and how can I access the information

I have the following model

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

The relationship his has follow

Customer
  has_many book_managers
  has_many books :through -> book_managers
Book
  has_many book_managers
  has_many customer :through -> book_managers
Book_managers
  belongs_to :customer
  belongs_to :book

When a customer wants to edit the content, i want to be the latest one to be shown if any exist. The query i have at the moment doesn't seem to handle an empty case and not sure how to do it.

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

How should i declare it in a def edit of the customercontroller??

Update: I want to be able to see my data, unfoturnotly it doesn't seem to work here my

customer controller

        def create
        @customer = Customer.new(params[:customer])
            @book = @customer.books.build(params[:book])
        if @customer.save
        cookies[:auth_token] = @customer.auth_token
        redirect_to @customer, notice: "Thank you for signing up!"
        else
            render "new"
        end
    end
    def edit
        @customer = Customer.find(params[:id])
        if current_customer.books.length > 0
           @book = current_customer.books.order("created_at DESC").first
        else
           #Nor books were found, so create one that has the proper relationship to current_customer
           @book = current_customer.books.build
        end
        end

I am rendering a partial from the book folder, should my create option be in the customer Controller or in bookControllers

Update: using customerController has my main create, when creating its say missing actions in books controller should i have more action in the book controller?

4

1 回答 1

0

All you need to do is a simple check in the controller to see if any books exist. If one does not exists then create a new one.

#Check if the books array contains anything. There are several ways to do this
if current_customer.books.length > 0
   @book = current_customer.books.order("created_at DESC").first
else
   #Nor books were found, so create one that has the proper relationship to current_customer
   @book = current_customer.books.build
end
于 2012-08-01T00:33:31.507 回答