text_field
text_field(object_name, method, options = {})Returns an input tag of the “text” type tailored for accessing a specified attribute (identified by method) on an object assigned to the template (identified by object). Additional options on the input tag can be passed as a hash with options. These options will be tagged onto the HTML as an HTML element attribute as in the example shown.
Examples
text_field(:post, :title, size: 20) # => <input type="text" id="post_title" name="post[title]" size="20" value="#{@post.title}" /> text_field(:post, :title, class: "create_input") # => <input type="text" id="post_title" name="post[title]" value="#{@post.title}" class="create_input" /> text_field(:post, :title, maxlength: 30, class: "title_input") # => <input type="text" id="post_title" name="post[title]" maxlength="30" size="30" value="#{@post.title}" class="title_input" /> text_field(:session, :user, onchange: "if ($('#session_user').val() === 'admin') { alert('Your login cannot be admin!'); }") # => <input type="text" id="session_user" name="session[user]" value="#{@session.user}" onchange="if ($('#session_user').val() === 'admin') { alert('Your login cannot be admin!'); }"/> text_field(:snippet, :code, size: 20, class: 'code_input') # => <input type="text" id="snippet_code" name="snippet[code]" size="20" value="#{@snippet.code}" class="code_input" />
3Notes
Alternative force initial value
@Bounga - Thanks for the suggestion. Didn't know about that method. An alternative method I have used is just to assign the default value to the object in your controller. For example your "new" action might now look like:
def new @ecard = Ecard.new params[:ecard] @ecard.sender ||= '[email protected]' end
Re: Force initial value
An alternative to @eric_programmer's would be to extract it entirely from the controller logic...
class Person
def sender
self[:sender] || '[email protected]'
end
end
There are a ton of ways to do it, but making this a business logic decision will let you get the same logic from any possible implementation angle. Scripts, web service, etc.
BEWARE of options[:value] in a partial
No problem with new records however,
the following line will not display the current @ecard value on EDIT but '[email protected]'. text_field :ecard, :sender, :value => '[email protected]' Don't let your views take control, but if you insist: text_field :ecard, :sender, :value => f.object.ecard.blank? ? '[email protected]' : f.object.ecard This doesn't make sense, since when this object was created they deleted the default, which made it blank. Why would they want it back?