浏览 5728 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-01-09
1. rails对同名参数的解析 经试验,当请求参数为: ?test=1&test=2&test=3时,rails解析参数的结果为: test=1。即只保留了第一个同名参数,而其余的被忽略。 由于Ruby不熟,看不懂源代码,因此无法确定以上结果是否必然。 2. rails对checkbox的处理 根据RDoc对FormHelper::check_box()方法的说明,以下调用 check_box("puppy", "gooddog", {}, "yes", "no")将得到输出结果: <input type="checkbox" id="puppy_gooddog" name="puppy[gooddog]" value="yes" /> <input name="puppy[gooddog]" type="hidden" value="no" />。 如果1的假设成立的话,要保证服务器端获得checkbox的正确的值,须再作假定:浏览器提交窗体时,将依据元素在窗体中出现的顺序依次提交。 不知以上推理是否正确,该假定是否对所有浏览器成立。 3. rails如何处理多项选择的checkbox 在某些系统中,通常使用一组同名checkbox来处理需要多项选择的情况,如下例所示: <input type="checkbox" id="foo_bar" name="foo[bar]" value="1" /> <input type="checkbox" id="foo_bar" name="foo[bar]" value="2" /> <input type="checkbox" id="foo_bar" name="foo[bar]" value="3" /> 在java servlet中,同名的参数,其对应参数值将被解析为一个数组。而在rails中由于1中指出的问题,只有第一个参数值被保留,其余将被舍弃。 在rails中,有其余方法可以达到类似效果吗? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-01-09
用同名参数当然不可行了,但是使用同名数组就不一样了。 在RHTML中使用check_box_tag: <%=check_box_tag 'puppies[]',1,false%> <%=check_box_tag 'puppies[]',2,false%>
在CONTROLLER中使用: params[:puppies].to_a.each do |puppy| ... end 这样可以获得你选中的所有CHECK_BOX的值。
|
|
返回顶楼 | |
发表时间:2008-01-11
谢谢。
写了一个helper方法,用来显示多个选项的checkbox,欢迎指正: def check_boxes(form_name, field_name, choices, options) object = self.instance_variable_get("@#{form_name}") selected = object ? object.send("#{field_name}").to_a : [] choices = choices.to_a if Hash === choices choices.inject([]) do |tags, element| if !element.is_a?(String) and element.respond_to?(:first) and element.respond_to?(:last) is_selected = ( (selected.respond_to?(:include?) && !selected.is_a?(String) ? selected.include?(element.last) : element.last == selected) ) if is_selected tags << "<input type=\"checkbox\" name=\"#{form_name}[#{field_name}][]\" value=\"#{html_escape(element.last.to_s)}\" selected=\"selected\">#{html_escape(element.first.to_s)}" else tags << "<input type=\"checkbox\" name=\"#{form_name}[#{field_name}][]\" value=\"#{html_escape(element.last.to_s)}\">#{html_escape(element.first.to_s)}" end else is_selected = ( (selected.respond_to?(:include?) && !selected.is_a?(String) ? selected.include?(element) : element == selected) ) tags << ((is_selected) ? "input type=\"checkbox\" name=\"#{form_name}[#{field_name}][]\" value=\"#{html_escape(element.to_s)}\" selected=\"selected\">#{html_escape(element.to_s)}" : "input type=\"checkbox\" name=\"#{form_name}[#{field_name}][]\" value=\"#{html_escape(element.to_s)}\">#{html_escape(element.to_s)}") end end end |
|
返回顶楼 | |