使用不是由rake和scaffold在rails中生成的数据库

时间:2012-04-02 06:36:32

标签: ruby-on-rails ruby-on-rails-2

我正在使用:

Rails 2.3.5
Ruby 1.8.7
Windows 7 Home basic 64-bit

我正在尝试使用我使用mysqldump获取的数据库,并创建函数ADD,EDIT和DELETE来使用它。现在,当我创建编辑功能,并且我使用其主键(productCode)作为参数时,我收到此错误:

PosController#edit中的ActiveRecord :: RecordNotFound 找不到没有ID的产品

应用追踪: 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:在`edit'

这是我的代码:

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

我的数据库中没有:id列。

2 个答案:

答案 0 :(得分:2)

如果productCode是表格中的主键,那么您应该告诉rails使用它而不是id

class Product << ActiveRecord::Base

  self.primary_key = 'productCode'

end

这样标准的find调用就可以了,而且你不需要覆盖像to_param这样的方法,因为rails已经为你做了

答案 1 :(得分:1)

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

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

修改

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