Forum: Ruby on Rails Multiple Database write question

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.
Andrew F. (Guest)
on 2006-01-27 19:58
(Received via mailing list)
I am working on reconfiguring an app that we are about to release to
work tighter with another app that we already have. Both of these
apps are going to share a single users database that stores the
general information about the user such as login, password, name,
email and so forth. They also have app specific stuff that is
attributed to the user that is stored in the app's own db. My
question is this, I have tried several ways to get a single object to
be created from data coming from different DB's but could not get it
to work so i went about having a couple of different objects and
reworking the various actions to pull data from them. However I ran
into an issue that I can't wrap my head around.

The User model has a establish_connection set to my shared users
database and I can read data all day long from it and everything
works fine, however when I go to allow the user to edit their profile
(change prefered language, or their email) the app hapily sends the
data to the controller, but the info is never saved into the
database. Looking through the logs nothing ever complains either.
Where things are really getting me is that on a different box, where
we have not made these changes yet if i go through the same process
the app reacts as it should. It is my understanding that when
connecting to another DB you do it in the model and than it should
connect and update what needs to be changed.

My controller looks like this:

def info
@updateuser = nil
if @request.post?
	@updateuser = User.find_first(["login = ?", @user.login])
	@updateuser.lastname = @params[:post][:lastname]
	@updateuser.firstname= @params[:post][:firstname]
	@updateuser.prefered_language = @params[:prefered_language]
	notice = ""
	if not @params[:post][:password].empty? and not @params[:post]
[:passwordbis].empty?
		if @params[:post][:password] == @params[:post][:passwordbis]
			@newuser.password = @params[:post][:password]
		else
			notice += "Your passwords don't match!"
		end
	end
	if not notice.empty?
		flash[:notice] = notice
		redirect_back_or_default :controller => "podcasts"
	else
		if not @updateuser.nil? and @updateuser.save
			flash[:notice] = _('account_prefs_saved')
			redirect_back_or_default :controller => "articles"
			@user = @updateuser
		else
			flash.now[:notice] = "An error occured while saving your preferences"
			redirect_back_or_default :controller => "articles"
		end
	end
end

and my model has the following connection code in it:

establish_connection(:adapter => "mysql",
                                :host => "localhost",
                                :port => 3306,
                                :database => "GlobalUsers_development",
                                :username => "root",
                                :password => "root")
  set_table_name "users"

as you can see right now on my dev box I am connecting to my local
mysql instance as root so it shouldn't be permission problems.

Do I need to establish a connection in the controller as well to
update this info? My understanding of the Various Howto's that I have
found only mention putting the code in the model to connect.

Aslo I have tried to put the connection info in my database.yml file
but rails complains left and right when I try to access the app that
the database is not initialized.

thanks for all the help

Andrew
Andrew F. (Guest)
on 2006-01-29 19:49
(Received via mailing list)
Can someone please help me figure this out. I did some playing around
and if I change my below code to something like this:

@updateuser.update_attribute(:prefered_language, @params
[:prefered_language])

and leave everything else alone it works for the most part except
that I lose my flash notice that everything was saved in the users
preferences. However If I leave it as it was it doesn't work when
going after my new database but if the user table is in the existing
app database it works as it should. (proven by the current production
server of the app). I thought if I explicitly put a @updateuser.save
in there it would work however it does not, no matter where I put a
@updateuser.save the @updateuser object does not update the
associated table for that user. I really would like to get it working
the way that I have it right now but would make the change if I
absolutely must, as like I said it worked before I switched to moving
the user info to a second database.

Any thoughts would be much appreciated.

Andrew
This topic is locked and can not be replied to.