2010-01-04 2 views
1

J'ai une table appelée "order" qui a beaucoup de "order_items", chaque "order_items" appartient à "order" et "product". Dans la DB, j'ai un enregistrement dans l'ordre. le dossier est comme ceci:Pourquoi je ne peux pas boucler l'information de DB dans RoR?

table commandes

: id = 1 name = client

et la table ordre_items est comme ceci: id = 1 product_id = 233 order_id = 1

id = 2 product_id = 454 order_id = 1

Je suis en train de ce code pour montrer l'ordre, mais il est pas le succès:

<% semantic_form_for @order do |f| %> 
    <% f.inputs do %> 
    <%= f.input :name %> 

    <% end %> 
    <%= f.buttons %> 
<% end %> 

et voici mon order.rb:

class Order < ActiveRecord::Base 
    has_many :order_items 



end 

last but not least, c'est le contrôleur de order.rb:

class OrderController < ApplicationController 
    # GET /orders 
    # GET /orders.xml 
    def index 
    @orders = order.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @orders } 
    end 
    end 

    # GET /orders/1 
    # GET /orders/1.xml 
    def show 
    @order = order.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @order } 
    end 
    end 

    # GET /orders/new 
    # GET /orders/new.xml 
    def new 
    @order = order.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @order } 
    end 
    end 

    # GET /orders/1/edit 
    def edit 
    @order = order.find(params[:id]) 
    end 

    # POST /orders 
    # POST /orders.xml 
    def create 
    @order = order.new(params[:order]) 

    respond_to do |format| 
     if @order.save 
     flash[:notice] = 'order was successfully created.' 
     format.html { redirect_to(@order) } 
     format.xml { render :xml => @order, :status => :created, :location => @order } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @order.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /orders/1 
    # PUT /orders/1.xml 
    def update 
    @order = order.find(params[:id]) 

    respond_to do |format| 
     if @order.update_attributes(params[:order]) 
     flash[:notice] = 'order was successfully updated.' 
     format.html { redirect_to(@order) } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @order.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /orders/1 
    # DELETE /orders/1.xml 
    def destroy 
    @order = order.find(params[:id]) 
    @order.destroy 

    respond_to do |format| 
     format.html { redirect_to(orders_url) } 
     format.xml { head :ok } 
    end 
    end 
end 

Et ceci est l'erreur de RoR:

appelé id pour nul, ce qui serait être à tort, 4 - si vous avez vraiment voulait l'ID de néant, l'utilisation object_id

+0

Avez-vous vérifié vos itinéraires? params [: id] est simplement nul. –

+0

mon autre objet fonctionne bien. seulement la "commande" ne peut pas – DNB5brims

Répondre

1

Classes en rubis doivent être en majuscule:

Order # class 
order # variable or method 

cela devrait fonctionner:

class OrderController < ApplicationController 
    def show 
    @order = Order.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @order } 
    end 
    end 
    # ... 
end 

dans votre show.html.erb:

#... 
<%= @order.name => 
#... 

url:

/orders/:id 

si vous voulez, disons une forme d'édition standard:

# edit.html.erb 

<% form_for @order do |f| %> 
    <%= f.input :name %> 
    # fields 
    <%= f.submit "Place order" %> 
<% end %> 
Questions connexes