Hi All,
I need to update the records in the mysql with the data
fields
from the xml where the id field not presented in the database,
instead we took the number as primary key but not auto_incremented.
I treid with many attempts
for example my view as follows …
Editing employee
<% form_tag :action =>'update',:id => @employee.number do -%><%= label 'Employ_No','Employee Number' %> |
<%= text_field 'employee','number',:value =>
@employee.number,:size => "16",:maxlength => "20",:id=>'number' %>
@employee.name,:size |
<%= label ‘Employ_Job’,‘Employee Job’ %> |
<%= text_field ‘employee’,‘job’,:value => @employee.job,:size => “16”,:maxlength => “20”,:id=>“employ_job” %> |
<%= label ‘Employ_Salary’,‘Employee Salary’ %> |
<%= text_field ‘employee’,‘salary’,:value => @employee.salary,:size => “16”,:maxlength => “20”,:id=>“employ_salary” %> |
I tried with text_field_tag but i found this is the right way since we
can
access through the params[:employee] for all values and
params[:employee][:name] for individual fields
and in my controller
def update
begin
puts “In update”
no = params[:id]
employ = Employee.new
employ.number = params[:employee][:number]
employ.name = params[:employee][:name]
employ.job = params[:employee][:job]
employ.salary = params[:employee][:salary]
# puts “#{params[employ_no]}”
puts “#{params[:employee][:employ_no]}”
puts “#{params[:employee][:name]}”
puts “#{params[:id]}”
employee = Employee.find(:first,:conditions => ["number =
?",no])
@emp = Employee.find(:first,:conditions => ["number = ?",no])
puts "before update"
# if @emp.update(:no,params[:employee]) then
# puts "success"
# reder :text => "success"
# else
# puts "failed"
# render :text => "failed"
# end
if @emp.update_attributes(params[:employee]) then
puts "success"
reder :text => "success"
else
puts "failed"
render :text => "failed"
end
# employee.update_attribute(:number,employ.number)
puts "updated"
#if @emp!= nil then
# @emp.number = params[:employ_no]
# @emp.name = params[:employ_name]
# @emp.job = params[:employ_job]
# @emp.salary = params[:employ_sal]
# end
puts "#{params[:employee]}"
puts @emp
rescue => e
puts "error is #{e}"
end
end
Where my model has only 4 fields name,number,job,salary (here number is
the
primary key)
I tried with all the cases and vexed, It is througin error for each case
@emp.update(:number,params[:employee]) # ERROR : The private
method ‘update’ called
@emp.update_attributes(params[:employee]) # Mysql::Error: #42S22Unknown
column ‘id’ in ‘where clause’: UPDATE employees
SET salary
=
‘20000’,
number
= 6, job
= ‘se’, name
= ‘xxx’ WHERE id
= NULL
@emp.update_attributes(employ) # ERROR is undefined method
`stringify_keys!’
for #
How to achieve the updating? Please anybody help me…