ovatsug25
ovatsug25

Reputation: 8606

How can I do an assignment of the condition (a query) if is true, or do another assignment if the condition is false?

How can I save myself from typing

TypeOfVoyagePortActivity.find_by_description(activity_description)

twice?

This is the context I am using it in:

 if TypeOfVoyagePortActivity.find_by_description(activity_description)
   pl.activity = TypeOfVoyagePortActivity.find_by_description(activity_description)
 else
   pl.activity = TypeOfVoyagePortActivity.find_by_description("Custom") 
 end

Upvotes: 0

Views: 94

Answers (2)

Sergio Tulentsev
Sergio Tulentsev

Reputation: 230461

You could assign result of find_by_description to a variable

 if t = TypeOfVoyagePortActivity.find_by_description(activity_description)
   pl.activity = t
 else
   pl.activity = TypeOfVoyagePortActivity.find_by_description("Custom") 
 end

Or as a better alternative:

p1.activity = [activity_description, "Custom"].each_with_object(nil) do |a, memo|
  memo ||= TypeOfVoyagePortActivity.find_by_description(a)
end

Upvotes: 1

user904990
user904990

Reputation:

model = TypeOfVoyagePortActivity
pl.activity = model.find_by_description(activity_description) ||
  model.find_by_description("Custom")

Upvotes: 5

Related Questions