Ruby elegance

Hello,
I realise that Ruby is a both powerful and elegant language, so I have a
question on how to improve my code. I am currently working on a CMS. I
decided to put some predefined and constant database rows into a table,
and that code must be run once at the initialization of the application
(in environment.rb). So below is that code:

RawTexts = 6
if RawText.find(:all).length != RawTexts do
sfi = RawText.new
sfi.name = ‘sfi’
sfi.save!
conference_plan = RawText.new
conference_plan.name = ‘conference_plan’
conference_plan.save!
workshops_plan = RawText.new
workshops_plan.name = ‘workshops_plan’
workshops_plan.save!
city_map = RawText.new
city_map.name = ‘city_map’
city_map.save!
organizers = RawText.new
organizers.name = ‘organizers’
organizers.save!
partners = RawText.new
partners.name = ‘partners’
partners.save!
end

My question is: how to make it more elegant? There are some obvious
repetitions in the code; is it possible to omit them by some smart Ruby
mechanism?

Thanks,
Mike

P.S. Erratum - there shouldn’t be “do” in the second line of the code of
course :wink:

Try:

RawTexts = 6

if RawText.find(:all).length != RawTexts do
[‘sfi’, ‘conference_plan’, ‘workshops_plan’, ‘city_map’,
‘organizers’, ‘partners’].each do |itm|
RawText.create(:name => itm)
end
end

There’s probably an even more elegant way, but that at least removes a
lot of the duplication.

On 6/24/07, Michael [email protected] wrote:

sfi = RawText.new
city_map.save!
mechanism?

Thanks,
Mike


Posted via http://www.ruby-forum.com/.


http://www.jeremymcanally.com/

My free Ruby e-book:
http://www.humblelittlerubybook.com/book/

My blogs:
http://www.mrneighborly.com/
http://www.rubyinpractice.com/

Thanks very much :wink:

Hi –

On Mon, 25 Jun 2007, Michael wrote:

Hello,
I realise that Ruby is a both powerful and elegant language, so I have a
question on how to improve my code. I am currently working on a CMS. I
decided to put some predefined and constant database rows into a table,
and that code must be run once at the initialization of the application
(in environment.rb). So below is that code:

RawTexts = 6
if RawText.find(:all).length != RawTexts do

See Jeremy’s answer for shortening the code. Also you can do:

if RawText.count

instead of find(:all).length. That will save you loading all of the
records into memory.

David

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs