Can someone explain what is wrong with my syntax?


#1

Hey Everyone, I think this should be an easy one, and the solution
right now was to use two lines instead of one, but I am curious why
this syntax isn’t working.

Assignment.find(:all).delete_if {|assignment|
assignment.assignment_name == “Lunch” || assignment.assignment_name ==
“Lunch”}

This will return the array without the “Lunch”, but with the break
still in tact, so I tried again:

Assignment.find(:all).delete_if {|assignment|
assignment.assignment_name == (“Lunch” || “Break”)}

Nope! No good, once again, lunch is gone, but break is still in the
array.

tried to do the same thing with select as well . . . no dice. I have
this working right now with two lines of code, but I am really curious
where my syntax is going wrong. More a question of interest then
anything else.

Thanks!


#2

On 11 Dec 2008, at 15:59, BushyMark wrote:

still in tact, so I tried again:

Assignment.find(:all).delete_if {|assignment|
assignment.assignment_name == (“Lunch” || “Break”)}

Nope! No good, once again, lunch is gone, but break is still in the
array.

That doesn’t do what you think it does. First it evaluates (“Lunch” ||
“Break”) which evaluates to “Lunch”, so that just does

Assignment.find(:all).delete_if {|assignment|
assignment.assignment_name == “Lunch”}

you would need

Assignment.find(:all).delete_if do |assignment|
assignment.assignment_name == “Lunch” || assignment.assignment_name
== “Break”
end

or

Assignment.find(:all).delete_if do |assignment|
[“Lunch”, “Break”].include? assignment.assignment_name
end

Fred