J'essaye de faire une application simple de commande de livre dans Ruby on Rails et ai rencontré quelques problèmes. J'essaie de créer une page "passer commande" à partir d'un lien de chaque produit, de sorte que sur cette deuxième page les informations du livre sont là et il y a juste un formulaire pour remplir la quantité désirée par le client. Cependant je continue à courir dans la méthode non définie 'book_id' pour l'erreur nil: NilClass spécifiée ci-dessus (et quand je supprime cette ligne de code, je rencontre la même erreur sur la suivante - méthode indéfinie 'order_id').méthode indéfinie 'book_id' pour nil: NilClass
Voici mon code pour le point de vue que je continue à déconner sur:
<%= @order_item.book_id %>
<%= @order_item.order_id %>
<%= @order_item.total_pricel %>
<%= form_for @order_item.quantity do |f| %>
<%= f.label :quantity %>:
<%= f.text_field :quantity %><br />
<%= f.submit %>
<% end %>
Mon modèle OrderItem devrait avoir les clés étrangères ORDER_ID et book_id.
Voici mon modèle OrderItem:
class OrderItem < ActiveRecord::Base
belongs_to :order
belongs_to :book
validates :quantity, presence: true, numericality: {only_integer: true, greater_than: 0}
validate :book_present
validates :price, presence: true
validate :order_present
def unit_price
if persisted?
self[:unit_price]
else
book.price
end
end
def total_price
unit_price * quantity
end
private
def book_present
if book.nil?
errors.add(:book, "is not valid.")
end
end
def order_present
if order.nil?
errors.add(:order, "is not a valid order.")
end
end
def finalize
self[:unit_price] = unit_price
self[:total_price] = quantity * self[:unit_price]
end
end
Et voici le contrôleur:
class OrderItemsController < ApplicationController
def create
@order = current_order
@order_item = @order.order_items.new(order_item_params)
@order.save
session[:order_id] = @order.id
end
def update
@order = current_order
@order_item = @order.order_items.find(params[:id])
@order_item.update_attributes(order_item_params)
@order_items = @order.order_items
end
def destroy
@order = current_order
@order_item = @order.order_items.find(params[:id])
@order_item.destroy
@order_item = @order.order_items
end
private
def order_item_params
params.require(:order_item).permit(:quantity, :book_id)
end
end
En plus de ce qui est mon premier projet Rails, je suis généralement très nouveau pour le codage et apprécierais vraiment de l'aide!