Helpers and content_tag

Hello everyone, new rails developer wannabe here!

I am trying to create a calendar table to display the daily availability
of every staff member of a company. What I think I need is a header with
the days of the month and then a row (with as many cells as the number
of the days) for each staff member. The different background color of
each cell will represent a different availability status and the staff
members change so I want all this to be dynamically generated.

After researching online and with Ryan B.’ Railscast #213 - Calendars
Revised (#213 Calendars - RailsCasts) as my guide, I
have so far managed to generate the header of my table that displays the
days of the month in each cell.
module ReceptionHelper

def reception(date = Date.today, &block)
Reception.new(self, date, block).table
end

class Reception < Struct.new(:view, :date, :callback)
delegate :content_tag, to: :view

def table
    content_tag :table, class: "calendar" do
        daysHeader
    end
end

def daysHeader
    last_day = date.end_of_month.strftime("%d").to_i
    (0..last_day).to_a.map { |day| content_tag :th, day

}.join.html_safe
end
end

Now, here is where the questions and confusion begins:

Removing &block and :callback takes away the { … } functionality, as I
found out. I can’t really say I understand why.

Why does the above work but I can’t use (…).each do and the content_tag
block below?

(0…last_day).to_a.each do |day|
content_tag :th do
day
end
end

In my effort to display the rows for each staff, I first went with this:

def table
content_tag :table, class: “calendar” do
daysHeader + staffRows
end
end

def staffRows
staff.to_a.map { |staff| content_tag :tr, staff.name
}.join.html_safe
end

I added staff to the Reception class definition and I call with <%=
reception @staff %> - if that’s not a very good practice please feel
free to shout at me But instead of getting one row per staff member I
get all the member names next to each other in one row and right above
the header. Changing content_tag :tr to content_tag :td results in a
cell with the name of each staff after the last header cell. Afterwards,
I made some progress with this:

(0…last_day).to_a.each do |day|
content_tag :th do
day
end
end

However this produces only one cell for each room while I want a row
with as many cells as the header row.

As you understand, I am quite lost in this and it seems I am not even
clearly getting why the part that works as I want it to is correct. I
hope this post doesn’t give the impression that I am looking to have
everything served to me in a dish - I am rather looking for directions
that will help me understand.

P.S: I have posted a question on StackOverflow
(ruby - Quite new rails developer confused over content_tag and helpers - Stack Overflow)
if you want to answer there and get some points.