will_paginate
ユーザーがページ番号を入力し、Enterキーを押してそのページに移動できるように、フォームをに挿入しようとしています。
これを行うためにparams
、リクエストからwill_paginate
をフォームに非表示の入力として追加します。そうすれば、フォームの送信時に、これらの値すべてがページ番号(表示される唯一の入力)とともにURLに追加されます。
問題は、私の入力が子のhtmlノードではなく、親ノードのテキストとして解釈されているように見えることです。to_html
方法は次のとおりです。
def to_html
inputs = [@template.tag(:input, :name => 'page', :value => current_page, :size => 1)]
@options[:params].delete(:page)
@options[:params].delete(:action)
@options[:params].each do |k, v|
inputs << @template.tag(:input, :type => 'hidden', :name => k, :value => v)
end
html = inputs.join
form = @template.content_tag(:form, @template.content_tag(:div, html))
previous_page + form + next_page
end
ページに表示されるフォームは次のとおりです。
<form>
<div><input name="page" size="1" value="1" /><input name="utf8" type="hidden" value="✓" /><input name="full_query" type="hidden" value="{"name"=>"", "organization_name"=>"", "contact_type_id"=>""}" /><input name="commit" type="hidden" value="Generate List" /><input name="controller" type="hidden" value="contacts/contacts" /></div>
</form>
inputs.first
の内容だけ入れればdiv
、期待通りに動作します。しかし、複数の入力を挿入するとすぐに、テキストとして解釈されます。私はここで何が間違っているのですか?