Skip navigation

###############################################################################
## Create Table
###############################################################################

CREATE TABLE member (
  code CHAR(6) NOT NULL,
  first_name CHAR(30),
  last_name CHAR(30),
  CONSTRAINT member_pkey PRIMARY KEY(code)
) WITHOUT OIDS;

###############################################################################
## Create Rails App with PostgreSQL database
###############################################################################

C:\InstantRails\rails_apps>rails w2app -d postgresql
      create
      create  app/controllers
      create  app/helpers
      create  app/models
      create  app/views/layouts
      create  config/environments
      ...
      ...
      create  log/test.log

###############################################################################
## ADD on environment.rb
###############################################################################

ActiveRecord::Base.pluralize_table_names = false  

###############################################################################
## UPDATE database.yml
###############################################################################

development:
  adapter: postgresql
  database: wharsojo
  username: postgres
  password:

###############################################################################
## GENERATE Scaffold for member
###############################################################################

C:\InstantRails\rails_apps>cd w2app

C:\InstantRails\rails_apps\w2app>ruby script/generate scaffold member
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/member
      exists  test/functional/
  dependency  model
      exists    app/models/
      exists    test/unit/
      exists    test/fixtures/
      create    app/models/member.rb                     <---- Add Code for updating primary key..!
      create    test/unit/member_test.rb
      create    test/fixtures/member.yml
      create  app/views/member/_form.rhtml               <---- Update 1 Var text_field “code” =>   “id”
      create  app/views/member/list.rhtml
      create  app/views/member/show.rhtml
      create  app/views/member/new.rhtml
      create  app/views/member/edit.rhtml
      create  app/controllers/member_controller.rb
      create  test/functional/member_controller_test.rb  <---- Add 2 line of Code
      create  app/helpers/member_helper.rb
      create  app/views/layouts/member.rhtml
   identical  public/stylesheets/scaffold.css

###############################################################################
## ADD on Model Member
###############################################################################

class Member < ActiveRecord::Base
  set_primary_key "code" 
  
  def save_key(key) #............manual PK
    @key = key
  end
  
  def before_create #............manual PK
    self.id = @key
  end
  
  def update
    if self.id == @key #.........Original ActiveRecord::Base
       connection.update(
       "UPDATE #{self.class.table_name} " +
       "SET #{quoted_comma_pair_list(connection, attributes_with_quotes(false))} " +
       "WHERE #{self.class.primary_key} = #{quote(id)}",
       "#{self.class.name} Update"
       )
    else #.......................manual PK 
      connection.update(
      "UPDATE #{self.class.table_name} " +
      "SET #{self.class.primary_key} = #{quote(@key)}, " +
      "#{quoted_comma_pair_list(connection, attributes_with_quotes(false))} " +
      "WHERE #{self.class.primary_key} = #{quote(id)}",
      "#{self.class.name} Update"
      )
      self.id = @key
    end 
    return true
  end
end

###############################################################################
## ADD on Controller Member
###############################################################################

class MemberController < ApplicationController 
  def create
    @member = Member.new(params[:member])
    @member.save_key(params[:member][:id]) #...manual PK
    ...
    ...
  end
  ...
  ...
  def update
    @member = Member.find(params[:id])
    @member.save_key(params[:member][:id]) #...manual PK
    ...
    ...
  end
end

###############################################################################
## UPDATE _form.rhtml
###############################################################################

<%= error_messages_for 'member' %>
<!--[form:member]-->
<p><label for="member_code">Code</label><br/>
<%= text_field 'member', 'id' %></p>
...
...

###############################################################################

Advertisements

One Comment

  1. Hmm, why not a

    def before_update #............manual PK
    self.id = @key
    end

    function instead of your update hack ?


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: