2010-07-06 39 views
2

我有两个型号看起来像这样由协会(DataMapper的)

class Stage 
    include DataMapper::Resource 
    property :id, Serial 
    belongs_to :staff 
end 

class Staff 
    include DataMapper::Resource 
    property :id, String, :key => true 
    property :full_name, String 
    property :email, String 
    has n, :stages 
end 

我试图找到具有分配一个特定的职员各个阶段查找。我试过@stages = Stage.all(Stage.Staff => 'TM')

我在做什么错?

回答

1

试试这个,它已经有一段时间,因为我用的DataMapper。

Stage.all(Stage.staff.id => 'TM') 

这是假设“TM”实际上是您用于工作人员ID的值。

+0

谢谢,这很有帮助。 – Tom 2010-07-10 09:35:55

0

我做

@stages = Stage.all(:staff => 'TM') 
+0

它不返回错误,但不返回任何数据。如果我在其他领域如标题上运行它,它可以正常工作,但不适用于外键? – Tom 2010-07-06 08:20:25

+0

@Tom我无法测试它,我建议尝试使用以下链接指示关联:链接例如'Stage.all(:links => [:staff],Stage.staff.id =>'TM')' – philant 2010-07-09 19:42:00

2

其实你可以使用字符串键在DataMapper的是这样的:

Stage.all('staff.id' => 'TM') 

Stage.all('staff.name.like' => 'Ted%') 

你可以混合和匹配与该型号性能以及:

Stage.all('staff.name.like' => 'Ted%', 'id.gte' => 5) 

这将得到属于名字以'Ted'开头并且id大于或等于5的人的所有阶段。

+0

不知道%,谢谢 – Tom 2011-01-22 20:19:19

+0

要清楚,%是SQL部分字符串匹配语法。您也可以完成Stage.all('staff.name'=>/^ Ted /):)并且DataMapper足够聪明,可以知道如何进行匹配/翻译。 – knowtheory 2011-01-23 19:22:19