我正在使用:
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列。
答案 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