Hi there,
I'm running into a spot of bother with an engine I'm developing. I want
the table names I'm using to be configurable by the end user, such that
nothing is hard coded. Having looked through user_engine, I see it
makes use of things like: UserEngine.config(:some_table). I'm trying
todo the same thing, like in the following:
has_many :mac_user_grants, :class_name =>
MacEngine.config(:mac_user_grant_table)
But when i come to use the class this is in I get an error like the
following:
NameError: undefined local variable or method `mac_user_grants' for
MacAcl:Class
in my mac_engine.rb file, I have the following:
module MacEngine
if ActiveRecord::Base.pluralize_table_names
config :mac_user_grant_table, "mac_user_grants"
else
config :mac_user_grant_table, "mac_user_grant"
end
end
I'm guessing the problem lies with how/what
MacEngine.config(:mac_user_grant_table) returns, and how it gets
interpreted.
I've tried the following to no avail:
:class_name => "#{MacEngine.config(:mac_user_grant_table)}"
:class_name => MacEngine.config(:mac_user_grant_table).to_s
So my question is, and its probably more of a general Ruby question than
an engines one, what is :class_name expecting, and how can i provide it?
-v
--
keys: http://codex.net/gpg.asc
Mankind must put an end to war, or war will put an end to mankind
-- JFK
on 2006-04-06 12:58
on 2006-04-06 13:01
oops, appologies for replying to a previous post and forgetting to change the subject line after having removed the InReplyTo: -- keys: http://codex.net/gpg.asc Heisenberg may have slept here
on 2006-04-06 13:07
Well, I'll respond here then. http://api.rubyonrails.com/classes/ActiveRecord/As... If you look at some of the examples that use the :class_name parameter, it does want strings, but of the actual *class* name, not the table name. Luckily Rails rocks and provides a method on string to convert a table name to a class name: :class_name => MacEngine.config(:mac_user_grant_table).classify I think that should do it. -jeff On 4/6/06, Vincent AE Scott <rails@codex.net> wrote: > engine-developers mailing list > engine-developers@lists.rails-engines.org > http://lists.rails-engines.org/listinfo.cgi/engine... > -- Jeff Lindsay http://blogrium.com/
on 2006-04-06 13:13
#if progrium /* Apr 06, 04:04 */ > > I think that should do it. Ahha! perfect, appologies for not RTFM'in Just before you responded i tried: "MacEngine::" + MacEngine.config(:mac_user_grant_table).to_s.camelize and that also failed to work, I guess for exactly the same reason. > -jeff > #endif /* progrium@gmail.com */ -- keys: http://codex.net/gpg.asc When the rich wage war, it's the poor who die. -- Jean-Paul Sartre
on 2006-04-06 13:22
It's a Rails question, rather than a Ruby one, but here goes. The :class_name argument is expecting something of the form "MacUserGrants", and that might not be the same as your table name (which is probably "mac_user_grants", as you set it in the config). It's expecting a string representation of an actual Ruby class (and a subclass of ActiveRecord::Base in this particular case). I think you're more likely to want to do something like this: class Something < ActiveRecord::Base has_many :mac_user_grants end class MacUserGrants < ActiveRecord::Base set_table_name MacEngine.config(:mac_user_grants_table) end ... the table name is only really relevant in the class which stores data in that table in this case. - james On 4/6/06, Vincent AE Scott <rails@codex.net> wrote: > following: > end > > -- JFK > > _______________________________________________ > engine-developers mailing list > engine-developers@lists.rails-engines.org > http://lists.rails-engines.org/listinfo.cgi/engine... > -- * J * ~
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.