2012-04-02 7 views
0

ich verwende:eine Datenbank, die nicht von Rechen und Gerüst in Schienen erzeugt

Rails 2.3.5 
Ruby 1.8.7 
Windows 7 Home basic 64-bit 

Ich versuche, eine Datenbank verwenden ich mit mysqldump erworben, und erstellen Sie Funktionen hinzufügen, bearbeiten und DELETE mit gehen es. Wenn ich nun die Bearbeitungsfunktion erstelle und den Primärschlüssel (productCode) als Parameter verwende, erhalte ich folgende Fehlermeldung:

ActiveRecord :: RecordNotFound im PosController # bearbeiten Konnte das Produkt nicht finden ohne eine ID

App Trace: C: /Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb: 1567: in find_from_ids' C:/Ruby187/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:616:in find‘ C:/Users /Aldrin/Documents/Trabaho!/sites/dbSample/app/controllers/pos_controller.rb:13:in `bearbeiten‘

hier ist mein Code:

def edit 
@product = Product.find(params[:ProductCode]) 
end 

def update 
@product = product.find(params[:ProductCode]) 
if session[:user_id] 
      @log = "Welcome Administrator!" 
      @logout="logout" 
     else 
      @log = "Admin Log in" 
      @logout="" 
     end 

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

Ich habe keine: ID-Spalte in meiner Datenbank.

Antwort

2

Wenn productCode der Primärschlüssel in der Tabelle ist, dann sollten Sie Schienen sagen, es von id

class Product << ActiveRecord::Base 

    self.primary_key = 'productCode' 

end 

auf diese Weise anstatt zu verwenden Standard-find werden Anrufe arbeiten, und Sie müssen keine Methoden wie to_param als Schienen a überschreiben Ich habe es für Sie getan

+0

Aldrin, diese Lösung würde für dich arbeiten! Thnx wusste nichts von diesem Trick! –

+0

es sagt falsche Anzahl von Argumenten! :( –

+0

aah Entschuldigung, meine Schuld, sollte Beweis lesen meine Antwort sollte es lesen "self.primary_key = Produkt-Code" - habe den Code in meiner Antwort behoben –

1
def edit 
@product = Product.find(params[:id]) 
end 

def update 
@product = Product.find(params[:id]) 
.............................. 
end 

EDIT

def to_param 
    "#{product_code}" 
end 

def edit 
@product = Product.find_by_product_code(params[:id]) 
end 

def update 
@product = Product.find_by_product_code(params[:id]) 
.............................. 
end 
+0

danke, aber meine Tabelle hat keine a: ID-Spalte. –

+0

überschreiben Sie dann to_param Methode von Ihrem Modell –

+0

können Sie das weiter erklären? Ich bin neu bei Schienen. –

Verwandte Themen