I''m working on a Rails app using version 2.3.4. I''ve got a big
form somewhere that uses nested attributes, but I can''t seem to
access the constants from the other class.
Here''s basically what I''m doing:
class User < ActiveRecord::Base
   has_one :pref
end
class Pref < ActiveRecord::Base
   FOO = 1
end
And in app/views/user.html.erb:
<% form_for( :user, :url => { :action => go_to, :id => id }, :html
=>
{ :multipart => true, :id => "user_form" } ) do |f| %>
   <%- fields_for :email_pref do |p| -%>
     <%= p.radio_button :bar, Pref::FOO  %>
     <%= p.label :bar, "Bar", :value => Pref::FOO %>
     ...
   <%- end -%>
   ...
<%- end -%>
Of course there''s quite a bit more code than that, but this is where  
it goes
wrong. My error is:
/app/models/pref.rb:59: void value expression
Below it the code of the view, pointing out an error in the first line  
that uses Pref::FOO
I checked if it really is Pref::FOO that''s the problem by adding <%=
Pref::FOO %> before
the radiobutton. Also, User::FOO (and declaring the constant in the  
User class) works
perfectly fine. So it looks like I can''t access a Pref constant from a
User view, but that
sounds unreasonably limiting to me. I also tried ::Pref::FOO, which  
also doesn''t work.
I really do want this constant in the Pref class. Putting it in User  
is not a good
solution for me.
Any idea why this is a problem and how to solve it?
And what does this mysterious "void value expression" mean? Googling  
it yields very few
results (and most of them are the same).
mcv.
Ar Chron
2009-Sep-29  13:53 UTC
Re: void value expression when accessing constant from view
Perhaps in your users_controller action(s), you should create an instance of the Pref class for the view to work with? -- Posted via http://www.ruby-forum.com/.
Martijn Vos
2009-Sep-29  14:38 UTC
Re: void value expression when accessing constant from view
On 29 Sep 2009, at 15:53 PM, Ar Chron wrote:> > Perhaps in your users_controller action(s), you should create an > instance of the Pref class for the view to work with?Why should I need an instance? Aren''t constants tied to the class rather than an instance? mcv.
Ar Chron
2009-Sep-29  18:56 UTC
Re: void value expression when accessing constant from view
From  http://www.rubycentral.com/pickaxe/language.html
Constants defined within a class or module may be accessed unadorned 
anywhere within the class or module.
Outside the class or module, they may be accessed using the scope 
operator, ``::'''' prefixed by an expression that returns the
appropriate
class or module object. Like:
class Const
  def getConst
    CONST
  end
  CONST = OUTER_CONST + 1
end
Const.new.getConst     »     100
Const::CONST   »   100
-- 
Posted via http://www.ruby-forum.com/.