0

以下を使用しても何もレンダリングされないhtml.erbファイルがあります。

<% form_for :profile do |form| %>

これを使用する場合(「=」記号に注意してください):

<%= form_for :profile do |form| %>

これはhtmlの出力です:

ウェブページ

部分的なhtmlコード:

<%= form_for :profile do |form| %>

<%= text_field_for form, "first_name" %>
<%= text_field_for form, "last_name" %>
<div class="form_row">
    <label for="gender">Gender:</label>
    <%= radio_button :profile, :gender, "Male" %> Male
    <%= radio_button :profile, :gender, "Female" %> Female
</div>
<div class="form_row">
    <label for="birthdate">Birthdate:</label>
    <%= date_select :profile, :birthdate,
                    :start_year => Profile::START_YEAR,
                    :end_year => Time.now.year,
                    :include_blank => true,
                    :order => [:month, :day, :year] %>
</div>

Form_for定義:

def text_field_for(form, field,
                  size=HTML_TEXT_FIELD_SIZE,
                  maxlength=DB_STRING_MAX_LENGTH)
 label = content_tag("label", "#{field.humanize}:", :for => field)
 form_field = form.text_field field, :size => size, :maxlength => maxlength
 content_tag("div", "#{label} #{form_field}", :class => "form_row")
end    

コントローラーの一部:

def edit
 @user = current_user
 @user.profile ||= Profile.new
 @profile = @user.profile
 if param_posted?(:profile)
   if @user.profile.update_attributes(params[:profile])
    flash[:notice] = "Changes saved."
    redirect_to :controller => "users", :action => "index"
   end
  end
end
4

1 に答える 1

1

ヘルパーでは、ヘルパーによって生成されたタグのコンテンツとして渡された文字列が安全でtext_field_forあることを宣言する必要があるため、サニタイズしないでください。DIVこれはで行われhtml_safeます。

def text_field_for(form, field,
  size =HTML_TEXT_FIELD_SIZE,
  maxlength =DB_STRING_MAX_LENGTH)
  label = content_tag("label", "#{field.humanize}:", :for => field)
  form_field = form.text_field field, :size => size, :maxlength => maxlength
  content_tag("div", "#{label} #{form_field}".html_safe, :class => "form_row")
end
于 2013-02-09T00:04:36.967 に答える