Rails - Undefined Method 'client' for 'Book'

Asked

Viewed 64 times

1

Hello, I’m working with ruby on Rails and I’m having the error: 'Undefined method', as in the image undefined method

The employee is working, and if I put only the book.cliente_id, it works.

Follow the codes below:

view-> _book.html.erb

<%= livro.nome %>
<%= livro.departamento.nome %>
<%= livro.sinopse %>
<%= livro.editora %>
<%= livro.pg %>
<%= livro.emprestimo %>
<%= livro.devolucao %>

<% if livro.funcionario_id != nil %>
<%= livro.funcionario.nome %>
<% end %>


<% if livro.cliente_id != nil %>
<%= livro.cliente.nome %>
<% end %>


<%= button_to "Remover", livro, method: :delete, 
class: "btn btn-danger",
data: { confirm: "Tem certeza que deseja remover #{livro.nome} ?" } %>
<%= link_to "Alterar", edit_livro_path(livro), class: "btn btn-default" %>


<% if livro.cliente_id == nil %>
<%= link_to "Emprestar", "/livros/#{livro.id}/pegar", class: "btn btn-default" %>
<% else %>
<%= link_to "Devolver", "/livros/#{livro.id}/devolver", class: "btn btn-default" %>
<% end %>

Model - book.erb

class Livro < ApplicationRecordundefined>           
    belongs_to :departamento 
    belongs_to :funcionario, optional: true
    belongs_to :clientes, optional: true

    validates :nome, length: { minimum: 5 }
    validates :sinopse, length: { minimum: 10 }
    validates :editora, length: { minimum: 5 }
end

Controller -> bookbook_controller.erb

class LivrosController < ApplicationController
    before_action :set_livro, only: [:edit, :update, :destroy, :pegar, :devolver]

    def index
        @livros_nome = Livro.order(:nome).limit 20
    end

    def new
        @livro = Livro.new
        renderiza :new
    end

    def create
        @livro = Livro.new livro_params
        if @livro.save
            flash[:notice] = "Livro Cadastrado com Sucesso!"
            redirect_to livros_path
        else
            renderiza :new
        end
    end

    def destroy
        @livro.destroy
        redirect_to root_url
    end

    def busca
        @nome_buscar = params[:nome]
        @livros = Livro.where "nome like?", "%#{@nome_buscar}%"
    end

    def edit
        renderiza :edit
    end

    def update
        opcao = params[:opcao]

        if opcao == "1"
            if @livro.update livro_params
                flash[:notice] = "Livro atualizado com sucesso!"
                redirect_to livros_path
            else
                renderiza :edit
            end
        elsif opcao == "2"
           book = Livro.new loan_params
           id = book.funcionario_id
            book.emprestimo = Date.today
            book.devolucao = book.emprestimo.next_week
            loan = loan_params
            loan[:devolucao] = book.devolucao
            loan[:emprestimo] = book.emprestimo


            if Funcionario.find(id)
                id = book.cliente_id
                if Cliente.find(id)
                    cli = Cliente.find(id)
                    if cli.pendencia != nil || cli.pendencia != 0
                        if @livro.update loan
                        flash[:notice] = "Livro emprestado com sucesso!"
                        redirect_to livros_path
                        else
                            render :pegar
                        end # if update

                    else
                        render :pegar
                    end # if cli.pendencias

                else
                    render :pegar
                end # if cliente_id
            else
                render :pegar 
            end # if Funcionario_id

        elsif opcao == "3"
            #opcaoes


        # end fo IF opcao    
        end
    end

    def pegar

    end

    def devolver
        if @livro.cliente_id == nil
            flash[:notice] = "Livro já consta em nosso estoque!"
                 redirect_to livros_path
        else
            id = @livro.cliente_id
            if Cliente.find(id)
                 cli = Cliente.find(id)
                 if @livro.emprestimo > @livro.devolucao
                     @livro.emprestimo = nil
                     @livro.devolucao = nil
                     cli.pendencia = cli.pendencia + 2
                     hashcliente = {pendencia: cli.pendencia}
                     hashlivro = { emprestimo: nil, devolucao: Date.today, funcionario_id: nil, cliente_id: nil } 
                     cli.update hashcliente
                     @livro.update hashlivro
                     flash[:notice] = "Livro Devolvido com sucesso, pendencia no cliente #{cli.nome}!"
                     redirect_to livros_path

                 else
                     @livro.emprestimo = nil
                     @livro.devolucao = nil 
                     hashlivro = { emprestimo: nil, devolucao: Date.today, funcionario_id: nil, cliente_id: nil }  
                     @livro.update hashlivro
                     flash[:notice] = "Livro Devolvido com sucesso, sem nenhum atraso!"
                     redirect_to livros_path
                 end # emprestimo > devolver
            end # livro == nil


        end #procurar cliente


    end # devolver

    private

    def renderiza(view)
        @departamentos = Departamento.all
        render view
    end

    def set_livro
        id = params[:id]
        @livro = Livro.find(id)
    end

    def livro_params
        params.require(:livro).permit :nome, :sinopse, :editora, :pg, :departamento_id, :funcionario_id, :cliente_id, :devolucao, :emprestimo
    end
    def loan_params
        params.require(:livro).permit :funcionario_id, :cliente_id, :devolucao, :emprestimo
    end


end

Github link with project: https://github.com/felipeejunges/Biblioteca/

1 answer

1


Change in your model Book the relationship of clientes for cliente

class Livro < ApplicationRecord          
    belongs_to :departamento 
    belongs_to :funcionario, optional: true
    belongs_to :cliente, optional: true

    validates :nome, length: { minimum: 5 }
    validates :sinopse, length: { minimum: 10 }
    validates :editora, length: { minimum: 5 }
end

I think this should solve your problem.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.