在我的页面上,我收到了一堆照片项目,我可以通过复选框选择/取消选择:
<div id="image-item">
<img src="image_on_server.jpg">
<input name="images-checkbox" id="images-checkbox" value="1" type="checkbox">
</div>
该复选框是在导轨中创建的check_box_tag
。
这是我在同一页面上的AJAX表格,我可以一次为所有选定的照片设置标签:
=form_tag(batch_tagging_users_album_photos_path(@album), method: 'post', remote: true, id: 'tagging-form') do
.field
= text_field_tag :tag
= hidden_field_tag 'checkboxes[]'
= button_tag 'Submit Tag', type: 'submit', class: 'btn btn-default'#, id: 'batch-tagging'
据我所知,方括号表示Rails,字段输入将是一个数组。
这个小小的jquery片段确保隐藏的输入字段checkboxes[]
将获取所选项目的数组并将其发送到我的控制器操作batch_tagging
。
$('form#tagging-form').on('submit', function() {
$('input[name="checkboxes[]"]').val(checkboxes)
});
photos_controller中的batch_tagging操作:
def batch_tagging
@checked_items = @album.photos.where(id: params[:checkboxes])
respond_to do |format|
if Photo.update_tags(@checked_items, tag)
format.js
flash[:notice] = 'Photos successfully tagged'
else
format.json { render json: @album.errors, status: :unprocessable_entity }
end
end
end
到目前为止,很好...... @checked_items接收数据但不幸的是作为单个字符串。为了处理所有项目(不仅仅是第一项),我需要将@checked_items设置为字符串数组。
所以我现在得到的是参数:
Processing by Users::PhotosController#batch_tagging as JS
Parameters: {"utf8"=>"✓", "tag"=>"awesome_tag", "checkboxes"=>["421,422"], "button"=>"", "album_id"=>"some_friendly-id"}
我需要什么:
Processing by Users::PhotosController#batch_tagging as JS
Parameters: {"utf8"=>"✓", "tag"=>"awesome_tag", "checkboxes"=>["421","422"], "button"=>"", "album_id"=>"some_friendly-id"}
当然,我可以在控制器级别上获取字符串,将其分解并完成它,但通过表单发送字符串数组似乎更清晰。
我在这里缺少什么?