Returns an entire form with all needed input tags for a specified Active Record object. For example, let’s say you have a table model Post with attributes named title of type VARCHAR and body of type TEXT:
form("post")
That line would yield a form like the following:
<form action="/post/create" method="post"> <p> <label for="post_title">Title</label><br /> <input name="post[title]" size="30" type="text" value="Hello World" /> </p> <p> <label for="post_body">Body</label><br /> <textarea name="post[body]" rows="20" cols="40"> </textarea> </p> <input type="submit" value="Create" /> </form>
It’s possible to specialize the form builder by using a different action name and by supplying another block renderer. For example, let’s say you have a model Entry with an attribute message of type VARCHAR:
form("entry", :action => "sign", :input_block => Proc.new { |record, column| "#{column.human_name}: #{input(record, column.name)}<br />" }) => <form action="/post/sign" method="post"> Message: <input name="post[title]" size="30" type="text" value="Hello World" /><br /> <input type="submit" value="Sign" /> </form>
It’s also possible to add additional content to the form by giving it a block, such as:
form("entry", :action => "sign") do |form| form << content_tag("b", "Department") form << collection_select("department", "id", @departments, "id", "name") end
The following options are available:
- action - the action used when submitting the form (default: create if a new record, otherwise update)
- input_block - specialize the output using a different block, see above
- method - the method used when submitting the form (default: post)
- multipart - whether to change the enctype of the form to multipart/form-date, used when uploading a file (default: false)
- submit_value - the text of the submit button (default: Create if a new record, otherwise Update)
Source Code
# File action_view/helpers/active_record_helper.rb, line 67 def form(record_name, options = {}) record = instance_variable_get("@#{record_name}") options = options.symbolize_keys options[:action] ||= record.new_record? ? "create" : "update" action = url_for(:action => options[:action], :id => record) submit_value = options[:submit_value] || options[:action].gsub(/[^\w]/, '').capitalize contents = form_tag({:action => action}, :method =>(options[:method] || 'post'), :enctype => options[:multipart] ? 'multipart/form-data': nil) contents << hidden_field(record_name, :id) unless record.new_record? contents << all_input_tags(record, record_name, options) yield contents if block_given? contents << submit_tag(submit_value) contents << '</form>' end
<code/>and<pre/>for code samples.