论坛首页 编程语言技术论坛

check_box使用疑问

浏览 10414 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-14  
在准备做一个多选form时,check_box在使用上有不少问题,不知道如何解决?下面是试验过程

首先 controller中的代码如下
@my_data = MyTables.find(:all)


第一次:view的form中则准备这样写
<%for mydata in @my_data%>
<%=check_box("mydata","id")%>
<%end%>

当然这样写是有问题的,render过程中会尝试调用@mydata.id,不过代码中没有@mydata存在。运行时就会出错

第二次:
<%for mydata in @my_data%>
<%=check_box("my_data","id")%>
<%end%>


这次@my_data是存在了,可是@my_data是一个Array,Array可没有id函数。还是出错。

第三次:这次加入了个index属性
<%@my_data.each_with_index do |data,index|%>
<%=check_box("my_data","id",{"index"=>index})%>
<%end%>


id函数的问题始终存在,最终为了render成功,改成了下面两种代码

id改成array有的函数,就用size吧
<%@my_data.each_with_index do |data,index|%>
<%=check_box("my_data","size",{"index"=>index})%>
<%end%>

或者
<%=check_box("my_data11","id",{"index"=>index})%>

这两种代码,render是成功了。还是有问题。

当多选几个check_box之后,单击post按钮。无论怎么样,controller都没有收到选中状态数据。观察log,的确,post的数据中,没有一个是选中数据。
也就是说 checkbox是都显示出来了,不过只能看,不能用。

后来也尝试了下check_box_tag,稍微有所不同,post到controller的数据只有多个选中的其中一个,数据不全。也不能用。

这个rails的check_box,和check_box_tag,在这类使用循环生成form数据的代码中,难道完全不能使用吗?
循环生成多个check_box的需求还是常见的很,rails中该怎么正确编写这样的代码?

   发表时间:2006-11-15  
你看一下生成的html就会发现你生成的checkbox都用的一样的id和name,因为你的循环里的check_box第一第二个参数都是常量。

一般以tag结尾的form helper适合处理单一的model对象(约定绑定到第一个参数的同名实例变量上)。
而处理一批的话可以在check_box_tag的第一个参数name中个别指定,然后在action里自己解析。
0 请登录后投票
   发表时间:2006-11-15  
I met the same problem, I did not know how to do it, I just wrote the html code in the loop with id="id_<%= i %>", it worked.

Beginner's Hacker way!
0 请登录后投票
   发表时间:2006-11-15  
html基础不过关呀...
0 请登录后投票
   发表时间:2006-11-15  
请参考一下http://wiki.rubyonrails.org/rails/pages/HowToUseCheckBoxes
0 请登录后投票
   发表时间:2006-11-15  
<%=check_box_tag("my_data[#{id}]")%>

发送过去的是个hash。
0 请登录后投票
   发表时间:2006-11-15  
qiezi 写道
<%=check_box_tag("my_data[#{id}]")%>

发送过去的是个hash。


<%for mydata in @my_data%>  
<%=check_box_tag("my_data[#{mydataid}]",mydata.id)%>  
<%end%>  

post的数据是

引用
"my_data"=>{"1"=>"1", "3"=>"3"}


如果这样写的话

<%for mydata in @my_data%>  
<%=check_box_tag("my_data#{mydata.id}",mydata.id)%>  
<%end%>  

post的数据是
引用
"my_data1"=>"1", "my_data3"=>"3"


写解析代码稍微有些差异。
0 请登录后投票
   发表时间:2006-11-15  
jack 写道
qiezi 写道
<%=check_box_tag("my_data[#{id}]")%>

发送过去的是个hash。


<%for mydata in @my_data%>  
<%=check_box_tag("my_data[#{mydataid}]",mydata.id)%>  
<%end%>  

post的数据是

引用
"my_data"=>{"1"=>"1", "3"=>"3"}


如果这样写的话

<%for mydata in @my_data%>  
<%=check_box_tag("my_data#{mydata.id}",mydata.id)%>  
<%end%>  

post的数据是
引用
"my_data1"=>"1", "my_data3"=>"3"


写解析代码稍微有些差异。

hash方便遍历key呀。

忘了一个最好的办法了:

<%= check_box_tag "my_data[]", mydata.id %>

发送过去的肯定是你最喜欢的 
0 请登录后投票
   发表时间:2006-11-16  
qiezi 写道

忘了一个最好的办法了:

<%= check_box_tag "my_data[]", mydata.id %>

发送过去的肯定是你最喜欢的 


你这样的代码没法子用,如果用在一个循环里面输出多个check_box,最后post的时候,只有一个数据提交。

0 请登录后投票
   发表时间:2006-11-16  
jack 写道
qiezi 写道

忘了一个最好的办法了:

<%= check_box_tag "my_data[]", mydata.id %>

发送过去的肯定是你最喜欢的 


你这样的代码没法子用,如果用在一个循环里面输出多个check_box,最后post的时候,只有一个数据提交。


你真的试过了吗?还是凭自己的直觉?
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics