Ah, I guess integer indexed parameters are already in Array format.  Try 
dropping the #values part here:

 a.word.split("").zip(params[:letter]).each_with_index do |…|

We should take this discussion to stackoverflow.com 
http://stackoverflow.com/questions/tagged/ruby


On 31/10/2011, at 4:30 AM, Robin Reid wrote:

> thank you Chris!
> 
> i realized, after posting that this needed to be in the Sinatra forum,
> but you responded so that is good!
> 
> I am still very new to RUBY and coding in general....so i am doing
> things the long way. It seems here that you have condensed five lines
> into one line?  That's amazing...
> 
> I replaced my for loop, and
> 
> my comparison line :
> 
> lettername = 'letter' + String(i)
> lettername = lettername.to_sym
> 
> if(params[lettername] == letter)
>   lettername = letter
> 
> with:
>  a.word.split("").zip(params[:letter].values).each_with_index do |
> (expected, got), idx|
>    output += "<input type='text' name ='letter[#{i}]'
> value='#{expected == got ? expected : ''}' size='1'/>"
>  end
> 
> But I must be missing something. I am getting an error message that
> says it doesn't recognize "value"...
> 
> Thanks a million for taking the time out to answer me...so much
> appreciated.
> 
> Best,
> 
> Robin
> On Oct 29, 8:16 pm, Chris Corbyn <[email protected]> wrote:
>> Hi Robin,
>> 
>> This is quite unrelated to DataMapper and more related to programming in 
>> general.  I'll answer anyway.
>> 
>> I'm not sure if you want critique on the code itself, but it struck me when 
>> I opened that gist just how un-ruby-esque the code is.  I looks like 
>> JavaScript or something at a first glance.
>> 
>> For example, creating markup with:
>> 
>>   form = ''
>>   form += '<form … >'
>>   form += '<input …>'
>>   form += ' …. '
>>   form += '</form>'
>> 
>> Is needlessly verbose and hard to read.  Side-stepping the fact that Sinatra 
>> allows you to use template engines like ERB or HAML, you can immediately 
>> improve the current code simply by replacing the repeated concatenation with 
>> here-doc:
>> 
>>   form = <<-HTML
>>     <form … >
>>       <input …. >
>>       …..
>>     </form>
>>   HTML
>> 
>> Also, in ruby, using for-loops is generally avoided in favour of #each:
>> 
>>   for letter in a.word.split("")
>>     output +="<input type='text' name ='letter[#{i}]' value='' size='1'/>"
>>     i = i+1
>>   end
>> 
>> Becomes
>> 
>>   a.word.split("").each do |letter|
>>     output +="<input type='text' name ='letter[#{i}]' value='' size='1'/>"
>>     i = i+1
>>   end
>> 
>> You can also remove the need for the temporary variable 'i' by using a more 
>> appropriate iterator method:
>> 
>>   a.word.split("").each_with_index do |letter, i|
>>     output +="<input type='text' name ='letter[#{i}]' value='' size='1'/>"
>>   end
>> 
>> With the for loop removed and us now looking at what methods ruby offers for 
>> working with its data structures, I *think* the logic you're looking for is 
>> a letter-by-letter comparison with the expected word, which #zip lends 
>> itself to:
>> 
>>   a.word.split("").zip(params[:letter].values).each_with_index do 
>> |(expected, got), idx|
>>     output += "<input type='text' name ='letter[#{i}]' value='#{expected == 
>> got ? expected : ''}' size='1'/>"
>>   end
>> 
>> Regards,
>> 
>> Chris
>> 
>> On 30/10/2011, at 9:10 AM, Robin Reid wrote:
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>>> hi all,
>> 
>>> i am writing a puzzle game in sinatra and using datamapper. i am
>>> extremely stuck in the last part of my game. The game has 2 parts: 1)
>>> someone can create a word puzzle and send it to their friends 2) that
>>> puzzle player can try to fill it out and see if they get he correct
>>> answer.
>> 
>>> in the final step of the puzzleplayers game, he/she must fill in boxes
>>> with the letters that they are guessing. I want to be able to compare,
>>> immediately as they enter, if their guessed letter, matches the letter
>>> stored by the puzzle creator. If it matches, then the input letters
>>> will stay in the box, if they don't it will wipe out, they will have
>>> to try again.  i don't know how to do this.
>> 
>>> my code is here...if anyone is around and cares to take a crack at
>>> helping me. I would greatly appreciate it.
>> 
>>> https://gist.github.com/39bd78d70018e3438080
>> 
>>> thanks!
>> 
>>> robin reid
>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "DataMapper" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to 
>>> [email protected].
>>> For more options, visit this group 
>>> athttp://groups.google.com/group/datamapper?hl=en.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "DataMapper" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/datamapper?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to