レールのフォームに複数選択入力フィールドがあります。モデルのバリデーターが受け入れない値をユーザーが送信した場合を除いて、これは完全に機能します。ページが再レンダリングされてエラー メッセージが表示されると、フォーム フィールドが複数選択フィールドからテキスト フィールドに変わります。問題は、レールが何らかの理由でcssクラスを変更していることだと思います。フォームのインスタンス変数をロードするコントローラーは次のとおりです。
def edit
@skills = Skill.all.collect {|skill| skill.label}
@profile = current_user.profile
end
フォームは次のとおりです。
<%= simple_form_for(@profile, :html => { :method => :put }) do |f| %>
<%= f.error_notification %>
<%= f.input :tag_list, collection: @skills,
input_html: {class: 'chosen-select', multiple: true,
style: 'width: 390px; height: 40px; border-radius: 5px;'},
placeholder: 'Tags (seperated by commas)', label: "-" %> <br />
<%= f.submit "Save" %>
<% end %>
更新コントローラーは次のとおりです。
def update
@profile = current_user.profile
begin
if @profile.update_attributes!(profile_params)
flash[:notice] = "Successfully updated profile."
redirect_to profile_path(current_user.profile_name)
else
render :action => 'edit'
end
rescue
render :action => 'edit'
end
end
フォームは、最初に再読み込みされたときに完全に機能します。フィールド用に生成された html は次のようになります。
<div class="input select optional profile_tag_list">
<label class="select optional" for="profile_tag_list">-</label>
<input name="profile[tag_list][]" type="hidden" value="" />
<select class="select optional chosen-select" id="profile_tag_list"
multiple="multiple" name="profile[tag_list][]"
placeholder="Tags (seperated by commas)"
style="width: 390px; height: 40px; border-radius: 5px;">
<option value="Finance">Finance</option>
<option value="PHP">PHP</option>
<option value="python">python</option>
</select>
</div>
しかし、更新アクションが失敗した後にレンダリングすると、html は次のようになります。
<div class="input string optional profile_tag_list field_with_errors">
<label class="string optional" for="profile_tag_list">-</label>
<input class="string optional chosen-select" id="profile_tag_list"
multiple="multiple" name="profile[tag_list][]"
placeholder="Tags (seperated by commas)"
style="width: 390px; height: 40px; border-radius: 5px;" type="text"
value="PHP" />
<span class="error">Please only submit skills from the list.</span>
</div>
フォームが再レンダリングされたときに選択フィールドを表示するにはどうすればよいですか? ありがとう。