Forum: Ruby on Rails using ERB to generate file on disk?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
207a26f9681e4d0c270c8c5c07a75bd2?d=identicon&s=25 Andrea B. (Guest)
on 2007-06-18 16:29
(Received via mailing list)
Hi,

I would like to write form data into a file, and I would like
to know if there's a way for me to use an ERB template
directly to output the file to disk?

I was going to use a series of puts("Full name: @order.full_name")
statements, but thought, there MUST be a better way!

any help or advice on what would be the most efficient way to
tackle this in RoR would be much appreciated.

ex ERB I used for generating the e-mail:

### order.rhtml
Full name: <%= @order.full_name %>
<%= @order.notes %>
<%= render(:partial => "./line_item", :collection =>
@order.line_items) %

__
Andrea
Cb98c59a6ff22c72676e756bbd28f266?d=identicon&s=25 Jacob Atzen (Guest)
on 2007-06-18 17:36
(Received via mailing list)
Andrea B. wrote:
> tackle this in RoR would be much appreciated.
>
> ex ERB I used for generating the e-mail:
>
> ### order.rhtml
> Full name: <%= @order.full_name %>
> <%= @order.notes %>
> <%= render(:partial => "./line_item", :collection =>
> @order.line_items) %

As I understand your question you have an ERB template and instead of
rendering it to the screen you want to render the template to a file on
the disk. One way of doing this is to use the render_to_string function
from Rails. Check out:

http://api.rubyonrails.com/classes/ActionControlle...

--
Cheers,
- Jacob Atzen
207a26f9681e4d0c270c8c5c07a75bd2?d=identicon&s=25 Andrea B. (Guest)
on 2007-06-18 18:43
(Received via mailing list)
Hi Jacob,

  Thank you very much for your help, this seems to be exactly what I
was
looking for! I just have one question about usage.

  The documentation says:
                       "Renders according to the same rules as
render,
                        but returns the result in a string instead of
sending
                        it as the response body to the browser."

  Does this mean it takes the ENTIRE ERB template (multiline) and
puts it into one long string? or does it convert each line of the
string into an item in a COLLECTION?

 puts(template)     # will this put all of it in?

 or do I need to loop over and build the file one string at a time

 for x in template
       puts(x)
 end


thanks again,

__
Andrea
2f9a03aa0fcfe945229cb6126eda2cb2?d=identicon&s=25 Philip Hallstrom (Guest)
on 2007-06-18 18:58
(Received via mailing list)
>
>  Does this mean it takes the ENTIRE ERB template (multiline) and
> puts it into one long string? or does it convert each line of the
> string into an item in a COLLECTION?

string
247373f81c5e8dae5bcd03962a7323d6?d=identicon&s=25 Wojciech Piekutowski (Guest)
on 2007-06-19 13:16
(Received via mailing list)
Hi,

Everything is in the ERB docs:
http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/cla....

Small example from it:

  require "erb"

  # Create template.
  template = %q{
    From:  James Edward Gray II <james@grayproductions.net>
    To:  <%= to %>
    Subject:  Addressing Needs

    <%= to[/\w+/] %>:

    Just wanted to send a quick note assuring that your needs are
being
    addressed.

    I want you to know that my team will keep working on the issues,
    especially:

    <%# ignore numerous minor requests -- focus on priorities %>
    % priorities.each do |priority|
      * <%= priority %>
    % end

    Thanks for your patience.

    James Edward Gray II
  }.gsub(/^  /, '')

  message = ERB.new(template, 0, "%<>")

  # Set up template data.
  to = "Community Spokesman <spokesman@ruby_community.org>"
  priorities = [ "Run Ruby Quiz",
                 "Document Modules",
                 "Answer Questions on Ruby Talk" ]

  # Produce result.
  email = message.result
  puts email

Generates:

  From:  James Edward Gray II <james@grayproductions.net>
  To:  Community Spokesman <spokesman@ruby_community.org>
  Subject:  Addressing Needs

  Community:

  Just wanted to send a quick note assuring that your needs are being
addressed.

  I want you to know that my team will keep working on the issues,
especially:

      * Run Ruby Quiz
      * Document Modules
      * Answer Questions on Ruby Talk

  Thanks for your patience.

  James Edward Gray II



You may put your template in separate file to clean up code and use
some rhtml editor with syntax highlighting.

Wojtek
This topic is locked and can not be replied to.