Really quick one today. I was working on my ActiveScaffold project, and came across the following problem:
My Events table has a column called schools, and so does my Schools table. For the Events, I needed a dropdown box listing all schools...while for Schools, I needed a text box to show up to type in the name of the school. Since textboxes are the default for activescaffold, I shouldn't need to do anything with schools in it, however, when I wrote a form override for Events in event_helper.rb to give it a dropdown box...the dropdown showed up in Schools also. So first, I tried doing a form override in the school_helper.rb. No luck, the event helper method has the same name, and overrides whatever method I put in school with the same name. So to fix it, I removed my helper methods from the event and school helpers. In application_helper.rb, I made a function with the same name as the form override function I had been trying to use, and then used an if to determine which model the helper was being called from. Here is the code:
# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
#hack to make activescaffold form overrides work when 2 models have a field that is the same name
def school_form_column(record, input_name)
if record.class.name == "Event"
select_tag input_name, options_for_select(aschools, selected = record.school)
else #record.class.name =="School"
text_field :record, :school, :name => input_name
end
end
private
#used in case of Event
def aschools
@schools = School.find(:all, :order => 'school')
@schooloptions = Hash.new
for school in @schools
@schooloptions[school.school] = school.abbrv
end
@schooloptions = @schooloptions.sort.each { |e| puts "#{e[0]} => #{e[1]}" }
end
end
Me: 2
ActiveScaffold: 0
Done.


5 comments:
An easier fix is to comment out the following line from application.rb like this:
#helper: all
I have the same problem.
But, my application have 18 entities and i cant use the "if fix".
I tryed to comment the line (commented by icmgr) but doesnt fixed.
Have another solution?
Tks
g. sobrinho: I would recommend a switch case statement
rledge21, it this a bug of Rails?
No, its a bug of ActiveScaffold. From what I have seen, a lot of experienced Rails'ers are kind of critical of ActiveScaffold, it doesn't fit in with the 'Rails Way'.
Post a Comment