@sub_seasons = [ [1, 2], [10, 20], [100, 200] ]
@sub_seasons.collect do |element| element.id end
--output:--
undefined method `id' for [1, 2]:Array (NoMethodError)
@sub_seasons = [ [1, 2], [10, 20], [100, 200] ]
@sub_seasons.collect do |element| element.id end
--output:--
undefined method `id' for [1, 2]:Array (NoMethodError)
I am not sure why you would expect anything else. @sub-seasons is an array. The collect method passes each element of @sub-seasons to the block, so the first time round element is an array [1,2]. An array does not have a method 'id' hence the error. What were you expecting it to do?
Colin
Colin Law wrote in post #1022477:
Not really. It was contrived, not a coincidence. It may have been interesting had you done the same thing as the OP... but you missed out one part of the collect. It would be more helpful if you'd asked the OP to confirm what was in the @sub_seasons variable - to double-check there wasn't an array of arrays in it. It sure is possible that she'd already performed a collect. But you didn't - you belittle without any explanation, and as you more frequently are than not: you're wrong.
Now if I wished to be as snide and sarcastic as you, I'd leave my post there, but instead, I'll suggest that *maybe* if you'd copied the OP's collect instead of spitefully hinting at your perceived superiority, the error you'd get would actually have been:
NoMethodError: undefined method `sub_season_type' for [1, 2]:Array
...seeing as the original collect accesses .sub_season_type before it accesses .id }:-[
Now, OP, can you please show the code that populates @sub_seasons in the controller - as I think the problem is something to do with what that's being filled with - it may be an array of arrays, or something else, but it would be nice to see.
@7Stud: Had you quoted anything in your post I might have realised that this was in response to a previous question. As it was, your post appeared to be a request for help in understanding some code. Please try to make your posts more clear in order to avoid wasting my time. Thanks.
Colin
Now, OP, can you please show the code that populates @sub_seasons in the controller - as I think the problem is something to do with what that's being filled with - it may be an array of arrays, or something else, but it would be nice to see.
Another thing to check is the value of @sub_season - the select helper will try to call id on that too.
Fred
*bingo* I'd say
yes... I'm moving my chips to that square - the helper looks for a default value for the :model and :method you've given it (:sub_season and :id in the original quote)