Ich versuche, eine einfache Buchbestellungsanwendung in Ruby on Rails zu machen und habe einige Probleme bekommen. Ich versuche, von jedem Produkt eine "Bestellung aufgeben" -Seite zu erstellen, so dass auf dieser zweiten Seite die Buchinformationen vorhanden sind und dann nur noch ein Formular zum Ausfüllen der vom Kunden gewünschten Menge vorhanden ist. Allerdings laufe ich weiter in die undefinierte Methode 'book_id' für nil: NilClass Fehler oben (und wenn ich diese Codezeile lösche, laufe ich in den gleichen Fehler auf dem nächsten - d. H. Undefinierte Methode 'order_id').undefined Methode 'book_id' für nil: NilClass
Hier ist mein Code für die Ansicht, die ich immer wieder vermasselt:
<%= @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 %>
Mein OrderItem Modell der Fremdschlüssel ORDER_ID und book_id haben sollte.
Hier ist mein OrderItem Modell:
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
Und hier ist der Controller:
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
Zusätzlich zu dieser ist mein erstes Rails-Projekt, ich bin im Allgemeinen sehr neu für Codierung und würde wirklich zu schätzen, etwas Hilfe!