`
jack
  • 浏览: 390375 次
  • 来自: 温州
社区版块
存档分类
最新评论

check_box使用疑问

阅读更多
在准备做一个多选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中该怎么正确编写这样的代码?

分享到:
评论
13 楼 qiezi 2006-11-17  
jack 写道
哦 我有些点忘记提了,我以为不重要的,这些check_box_tag我是放在form_remote_tag中的,可能这个有影响,而不是form_tag

form_remote_tag也是可以的。
12 楼 jack 2006-11-17  
哦 我有些点忘记提了,我以为不重要的,这些check_box_tag我是放在form_remote_tag中的,可能这个有影响,而不是form_tag
11 楼 qiezi 2006-11-16  
你大概是漏掉了什么,这里有个测试代码:
class TestController < ApplicationController
  def test
    if request.method == :get
      render :inline => <<-EOS
        <form action="/test/test" method="post">
          <% 5.times do |index| -%>
            <%= check_box_tag "foo[]", index %>item <%= index %><br />
          <% end -%>
          <%= submit_tag %>
        </form>
      EOS
    else
      render :text => params[:foo].to_json
    end
  end
end

先访问/test/test,出现一个表单,提交后将看到你选择的结果。
提交的参数如下:
引用

Processing TestController#test (for 127.0.0.1 at 2006-11-16 23:55:01) [POST]
  Session ID: 6ec9a9641360509d53dc5d8f7fc1d70b
  Parameters: {"commit"=>"Save changes", "action"=>"test", "foo"=>["0", "1"], "controller"=>"test"}
Completed in 0.01600 (62 reqs/sec) | Rendering: 0.00000 (0%) | 200 OK [http://localhost/test/test]

如果你是做批量更新记录,直接把上面的foo取出来用in操作就可以了。
10 楼 jack 2006-11-16  
qiezi 写道
jack 写道
qiezi 写道

忘了一个最好的办法了:

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

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


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


你真的试过了吗?还是凭自己的直觉?


试过了,所以才间隔这么久才回复的。就是为了试了才确定的。你这样的写法,最后生成的 input的name值是完全相同的,最终提交的时候,就会只能提交某一个checkbox的现象,这个在我开始的帖子里面就提到了。
9 楼 qiezi 2006-11-16  
jack 写道
qiezi 写道

忘了一个最好的办法了:

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

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


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


你真的试过了吗?还是凭自己的直觉?
8 楼 jack 2006-11-16  
qiezi 写道

忘了一个最好的办法了:

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

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


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

7 楼 qiezi 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 %>

发送过去的肯定是你最喜欢的 
6 楼 jack 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"


写解析代码稍微有些差异。
5 楼 qiezi 2006-11-15  
<%=check_box_tag("my_data[#{id}]")%>

发送过去的是个hash。
4 楼 crazycode 2006-11-15  
请参考一下http://wiki.rubyonrails.org/rails/pages/HowToUseCheckBoxes
3 楼 dogstar 2006-11-15  
html基础不过关呀...
2 楼 roseanne 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!
1 楼 cookoo 2006-11-15  
你看一下生成的html就会发现你生成的checkbox都用的一样的id和name,因为你的循环里的check_box第一第二个参数都是常量。

一般以tag结尾的form helper适合处理单一的model对象(约定绑定到第一个参数的同名实例变量上)。
而处理一批的话可以在check_box_tag的第一个参数name中个别指定,然后在action里自己解析。

相关推荐

    1click-calculator

    :check_box_with_check: 这意味着它很安全。 每个人都可以检查源代码。 :check_box_with_check: 这意味着,如果您是一名开发人员或实习生,那么不胜感激地贡献代码。 此扩展名是1ce的另一扩展名。 我们的使命是...

    1click-emoji-everywhere

    访问我们的网站以了解更多信息,并成为社区的一部分: : 如有疑问,请访问我们网站上的“常见问题解答”部分: : 使用指南: 安装扩展程序(单击“添加到Chrome”) 单击扩展程序图标(安装后)。 在打开的框中,...

    1click-start-page-wikipedia-random

    访问我们的网站以了解更多信息,并成为社区的一部分: : 如有疑问,请访问我们网站上的“常见问题解答”部分: : 使用指南: 安装扩展程序(单击“添加到Chrome”) 单击扩展程序图标(安装后)。 将会打开新的...

    1click-history-stats

    :check_box_with_check: 这意味着它很安全。 每个人都可以检查源代码。 :check_box_with_check: 这意味着,如果您是一名开发人员或实习生,那么不胜感激地贡献代码。 此扩展名是1ce的另一扩展名。 我们的使命是...

    1click-entire-page-save-as-png

    :check_box_with_check: 这意味着它很安全。 每个人都可以检查源代码。 :check_box_with_check: 这意味着,如果您是一名开发人员或实习生,那么不胜感激地贡献代码。 此扩展名是1ce的另一扩展名。 我们的使命是...

    1click-stream-webcam

    访问我们的网站以了解更多信息,并成为社区的一部分: : 如有疑问,请访问我们网站上的“常见问题解答”部分: : 使用指南: 安装扩展程序(单击“添加到Chrome”) 单击扩展程序图标(安装后)。 浏览器将打开新...

    1click-stream-desktop

    访问我们的网站以了解更多信息,并成为社区的一部分: : 如有疑问,请访问我们网站上的“常见问题解答”部分: : 使用指南: 安装扩展程序(单击“添加到Chrome”) 单击扩展程序图标(安装后)。 浏览器将打开新...

    1click-time-converter

    访问我们的网站以了解更多信息,并成为社区的一部分: : 如有疑问,请访问我们网站上的“常见问题解答”部分: : 使用指南: 安装扩展程序(单击“添加到Chrome”) 单击扩展图标。 在打开的窗口中,您将看到当地...

    1click Emoji Everywhere-crx插件

    这对您意味着什么::check_box_with_check:是安全的。 每个人都可以检查源代码。 :check_box_with_check:这意味着,如果您是一名开发人员或实习生,那么欢迎您贡献代码。 此扩展名是1ce的另一扩展名。 我们的使命是...

    1click selfy meme-crx插件

    这对您意味着什么::check_box_with_check:是安全的。 每个人都可以检查源代码。 :check_box_with_check:这意味着,如果您是一名开发人员或实习生,那么欢迎您贡献代码。 此扩展名是1ce的另一扩展名。 我们的使命是...

    1Click clipboard history-crx插件

    语言:Bahasa Indonesia,Deutsch,English,Français,Nederlands,Tiếng Việt,Türk...访问我们的网站以了解更多信息,并加入社区:https://1ce.org如有疑问,请访问我们网站上的FAQ部分:https://1ce.org使用指南:1.安

    1Click short link-crx插件

    语言:Bahasa Indonesia,Deutsch,English,Français,Nederlands,Tiếng Việt,Türkç...访问我们的网站以了解更多信息,并加入社区:https://1ce.org如有疑问,请访问我们网站上的FAQ部分:https://1ce.org使用指南:1.

    1Click blockchain currncies Balance-crx插件

    语言:Bahasa Indonesia,Deutsch,English,Français,Nederlands,Tiếng Việt,Türkçe,...访问我们的网站以了解更多信息,并加入社区:https://1ce.org如有疑问,请访问我们网站上的FAQ部分:https://1ce.org使用指南:

    1click Pick Color-crx插件

    语言:Bahasa Indonesia,Deutsch,English,Français,Nederlands,Tiếng Việt,Türkçe,...访问我们的网站以了解更多信息,并加入社区:https://1ce.org如有疑问,请访问我们网站上的FAQ部分:https://1ce.org使用指南

    1click Webcam to Picture-crx插件

    语言:Bahasa Indonesia,Deutsch,English,Français,Nederlands,Tiếng Việt,Türkçe...访问我们的网站以了解更多信息,并加入社区:https://1ce.org如有疑问,请访问我们网站上的FAQ部分:https://1ce.org使用指南:1

    1click Edit page-crx插件

    语言:Bahasa Indonesia,Deutsch,English,Français,Nederlands,Tiếng Việt,Türkçe,...访问我们的网站以了解更多信息,并加入社区:https://1ce.org如有疑问,请访问我们网站上的FAQ部分:https://1ce.org使用指

    1click Paintbrush-crx插件

    语言:Bahasa Indonesia,Deutsch,English,Français,Nederlands,Tiếng ...访问我们的网站以了解更多信息,并加入社区:https://1ce.org如有疑问,请访问我们网站上的FAQ部分:https://1ce.org使用指南:1.安装扩展(单

    1Click notepad-crx插件

    语言:Bahasa Indonesia,Deutsch,English,Français,Nederlands,Tiếng Việt...访问我们的网站以了解更多信息,并加入社区:https://1ce.org如有疑问,请访问我们网站上的FAQ部分:https://1ce.org使用指南:1.安装扩展

    1click World Clock-crx插件

    语言:Bahasa Indonesia,Deutsch,English,Français,Nederlands,Tiếng Việt,T...访问我们的网站以了解更多信息,并加入社区:https://1ce.org如有疑问,请访问我们网站上的FAQ部分:https://1ce.org使用指南:1.安装扩

Global site tag (gtag.js) - Google Analytics