Re: rails 2D array access in Helper method

Tamara Temple
Mon, 04 Nov 2013 22:51:36 -0000

On Nov 4, 2013, at 3:19 AM, Tamara Temple
<tamouse.lists-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:

>
> On Nov 3, 2013, at 3:35 PM, Tamara Temple
<tamouse.lists-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>
>>
>> On Nov 1, 2013, at 9:20 AM, leo nike
<lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:
>>
>>> Hi, I Want to simply print out 2d array elements. Method is located
in
>>> Helper module. Calling helper method from jQuery. At the moment
I''m not
>>> getting output (=> 0..3) I tried to do iterate through array via
.each()
>>> method, but it would just print en entire array, however i want to
>>> access each element and convert it either to string or integer. can
>>> someone point me to possible solution? thanks!
>>>
>>>     #app/helpers/controller_helper.rb
>>>         def get_array
>>>            database = SQLite3::Database.open("test.db")
>>>            result = database.execute("select * from
table1")
>>>            print_array(result)
>>>         end
>>>
>>>         def print_array(array)
>>>           for i in 0..array.length
>>>                puts array[i][i]
>>>           end
>>>         end
>>>
>>>
-------------------------------------------------------------------
>>>   #app/views/controller/file.js.erb
>>>
if($(''.check_box1'').is('':checked'')){
>>>          $("#div2").html("<%=
get_array%>")
>>>     }
>>>
>>> --
>>> Posted via http://www.ruby-forum.com/.
>>
>> You don’t want to use puts in there. You want to return the value so it
gets evaluated in the erb code. puts returns nil, which means you get nothing
inside the html element.
>>
>> I’m not exactly sure from that method what you want inside div2 either.
>>
>> Here’s what I’d suggest:
>>
>> def get_array()
>> # sqlite stuff as you have it
>> format_table(result)
>> end
>>
>> def format_table(data)
>> out = " \n"
>> out += data.map do |row|
>>   format_row(row)
>> end.join("\n")
>> out += "\n \n"
>> end
>>
>> def format_row(row)
>> out = " "
>> out += row.map do |cell|
>>   format_cell(cell)
>> end.join
>> out += " "
>> end
>>
>> def format_cell(cell)
>> " #{cell} "
>> end
>>
>> This will output html code, which seems like what you’d want at that
point.
>
> then i decided it was too ''wet'', and refactored:
>
> def wrap(s, tag, attr={}, &b)
>  s = [s] unless s.is_a? Array
>  attr = attr.empty? ? '''' : " #{attr.map{|k,v|
"#{k}=''#{v}''"}.join(" ")}"
>  out = "<#{tag}#{attr}>"
>  out += s.inject("") {|m,o| m+="#{block_given? ? (yield o) :
o}"}
>  out += "</#{tag}>"
> end
>
>
> def format_table(data)
>  wrap(data,"table",border: 1) do |row|
>    wrap(row,"tr") do |cell|
>      wrap(cell,"td")
>    end
>  end
> end
>
> data=[[1,2,3,4],[5,6,7,8]]
>
> formate_table(data) # => "<table
border=''1''> 1 2 3 4 5 6 7 8 "
>
> (https://gist.github.com/tamouse/7300078 )
>

Listening to one of Ruby Tapas made me shake my head with pain. This:

   s = [s] unless s.is_a? Array

should be this:

  s = Array.new(s)


--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit