Forum: Ruby on Rails Ruby elegance

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.
41441eb126803a57179119d8f82ca645?d=identicon&s=25 Michael (Guest)
on 2007-06-25 02:15
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
41441eb126803a57179119d8f82ca645?d=identicon&s=25 Michael (Guest)
on 2007-06-25 02:32
P.S. Erratum - there shouldn't be "do" in the second line of the code of
course ;)
6d3c187a8b3ef53b08e3e7e8572c4fea?d=identicon&s=25 Jeremy McAnally (Guest)
on 2007-06-25 02:33
(Received via mailing list)
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 <rails-mailing-list@andreas-s.net> 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/
41441eb126803a57179119d8f82ca645?d=identicon&s=25 Michael (Guest)
on 2007-06-25 11:43
Thanks very much ;)
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2007-06-25 13:14
(Received via mailing list)
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

--
* Books:
   RAILS ROUTING (new! http://www.awprofessional.com/title/0321509242)
   RUBY FOR RAILS (http://www.manning.com/black)
* Ruby/Rails training
     & consulting:  Ruby Power and Light, LLC (http://www.rubypal.com)
This topic is locked and can not be replied to.