Forum: Ruby on Rails Updating the mysql record without id feild

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
C6b3fb1b16a9878bc793a90bdc1c9799?d=identicon&s=25 Hema Gonaboina (hema_mca)
on 2008-11-19 12:53
(Received via mailing list)
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 ..

  <h1>Editing employee</h1>
<% form_tag :action =>'update',:id => @employee.number do -%>
<table>
      <tr>
            <td>
              <%=  label 'Employ_No','Employee Number' %>
            </td>
            <td>
              <%= text_field 'employee','number',:value =>
@employee.number,:size => "16",:maxlength => "20",:id=>'number' %>

            </td>
      </tr>
      <tr>
            <td>
              <%=  label 'Employ_Name','Employee Name' %>
            </td>
            <td>
               <%= text_field 'employee','name',:value =>
@employee.name,:size
=> "16",:maxlength => "20",:id=>"employ_name" %>
            </td>
      </tr>
      <tr>
            <td>
              <%=  label 'Employ_Job','Employee Job' %>
            </td>
            <td>
            <%= text_field 'employee','job',:value =>
@employee.job,:size =>
"16",:maxlength => "20",:id=>"employ_job" %>
            </td>
      </tr>
      <tr>
            <td>
              <%=  label 'Employ_Salary','Employee Salary' %>
            </td>
            <td>
              <%= text_field 'employee','salary',:value =>
@employee.salary,:size => "16",:maxlength => "20",:id=>"employ_salary"
%>
            </td>
      </tr>
</table>
 <%= submit_tag "Save" %>
<% end %>


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 #<Employee>


How to achieve the updating? Please anybody help me..
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-11-19 13:00
(Received via mailing list)
On 19 Nov 2008, at 11:52, hema gonaboina wrote:

> 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 ..
>
Your code is pretty impenetrable by virtue of the duplication, bits
commented out etc... but if you don't have a primary key column you
should be using set_primary_key to tell rails which column is the
primary key

Fred
C6b3fb1b16a9878bc793a90bdc1c9799?d=identicon&s=25 Hema Gonaboina (hema_mca)
on 2008-11-20 05:48
(Received via mailing list)
Thank You Fred for your reply.. I tried with the set_primary_key but
still it is throwing the exception,Sorry sending the code like that i
modified the code with removing the comments,the commented code is the
my trails to achieve the desired.I have given the ways and the errors
that are rendering for the particular call .. Please check and excuse
the mistakes if any,
C6b3fb1b16a9878bc793a90bdc1c9799?d=identicon&s=25 Hema Gonaboina (hema_mca)
on 2008-11-20 06:35
(Received via mailing list)
Thank You Fred
I got it
In model I kept the statement as
  self.primary_key = :number

It worked.. Thank you

On Nov 19, 4:59 pm, Frederick Cheung <frederick.che...@gmail.com>
This topic is locked and can not be replied to.