我对RoR很新颖,所以这可能是一个新手问题,但我无法找到答案并解决问题。 我需要从一个动态数组(通过连接表上的HABTM连接创建)检查条件中的每个元素。每个阵列对象上的RoR范围
现在,我有这样的事情:
scope :filter, lambda { |devicefilter, testtypefilter|
{
testtypefilter.each { |testtype|
:include => :tests,
:conditions => ['(tests.device != ? OR tests.device IS ?) AND ? NOT IN tests.testtypes', devicefilter, nil, testtype]
}
}
}
这说明我一个语法错误。 但我认为,即使我设法得到它的工作方式,它不会正确执行sql查询,因为ts和tts是通过HABTM连接的,所以表中的实际值为NULL,并且我将不得不创建另一个连接,查询。 我真的没有线索如何解决这个问题。 任何提示都会有所帮助。
谢谢, 尼科
编辑: 我的控制器看起来像这样
if params[:d] == nil or params[:t] == nil
@users = User.all
else
@users = User.filter(params[:d], params[:t])
end
:d为固定值,其是从select_tag 正在添加:吨是从一个正在添加的阵列大量的动态复选框
值都很好,并正确传递给模型。所以视图或控制器不应该成为问题。
编辑2: 由于它看起来有点不清楚,下面是目前的情况: 有一种形式,包括一个选择框和一堆复选框。 选择框从表格“设备”中获取其值,并在表单提交后将选定的值作为参数传递给控制器:d。 复选框是来自表“testtypes”的所有条目的列表,并且在提交表单之后,它将所有检查过的testtype_id的数组作为参数传递给控制器。 (正常工作)
现在有另一个表“测试”,它具有到设备和测试类型中所有条目的HABTM连接,所以我可以从1个设备和多个测试类型一起收集特定连接。
现在在“用户”表中有一列“测试”,它指的是HABTM连接中的表“测试”,因此1个用户可以有(参与)多个测试(可以有多个测试类型)。
因此,在提交表单后,值:d和:t应该用于sql查询以通过测试过滤所有用户(而测试依赖于设备和测试类型)。因此,所有用户都应该通过设备(:d)和testtypes(:t [])中的引用测试的值检查列测试。
但由于testtypes(:t [])作为数组传递,我不得不用sql请求以某种方式检查该数组的每个单个元素。还是有办法检查整个阵列?
例子:
There are 3 Devices: (dynamic table)
A01
A02
A03
There are 3 Testtypes: (dynamic table)
TT01
TT02
TT03
There are 4 Tests: (dynamic table with HABTM devices and testtypes)
T1 = A01 - TT01/TT03
T2 = A01 - TT03
T3 = A02 - TT02/TT03
T4 = A03 - TT01/TT02/TT03
There are 5 Users: (dynamic table with HABTM tests)
U1 = ... T1 ...
U2 = ... T2/T4 ...
U3 = ... T3/T4 ...
U4 = ... T1/T2/T3 ...
U5 = ... T3/T4 ...
Now the Form will look like:
Device: Select-Box={A01/A02/A03}
Testtypes: Checkboxes={TT01/TT02/TT03}
If i select now A01, check TT01+TT02 and submit the query should return every single User who has not participated in the following Tests:
A01 - TT01
A01 - TT02
So at last i get a list of users that i could use for the test A01 - TT01+TT03, since there are no conflicts.
So the query would return every user who has not participated in T1, since that is the only conflict.
So the userlist would look like:
U2
U3
U5
有人可以帮助我? 没有人知道了吗?:'(
告诉我们你有什么,以及你想要的东西,因为你真的以我认为的错误的方式;) – Robin 2011-12-21 12:45:14
我有一个表格,其中包含一个选择框和一些复选框(可以改变)。这个表格应该被用来过滤所有Pts表格中列“ts”的表格。列ts由2个值组成,因为它是具有HABTM的另一个表(ts)(1.d,2.t)。而且这些ts与d和t有另一个HABTM连接。 d是表d中的一个固定值(由select_tag选择)并且t是从表t中返回的数组(由复选框选择)。我想要的:简单的过滤器工作,并传递正确的SQL请求,所以我得到过滤表。 :) – Nikom 2011-12-21 13:05:35
由于不应在'lambda {| df,ttf |'之后使用'{'''',所以出现语法错误。 – Mischa 2011-12-21 13:25:34