2013-03-07 93 views
0

我该怎么做?从ActiveRecord-Hash中删除元素而不删除数据库

all_tickets = Ticket.find(:all) 

all_tickets.each do |at| 
    if at "a condition" 
     all_tickets.delete(at) 
    end 
end 

有了这个代码,我删除数据库中的元素,但我只希望从all_tickets删除在元ActiveRecord的散列当“条件”为真。

感谢您的帮助

+0

提示:“条件”不能通过sql发送/询问,这是一种外部条件。所以all_tickets.find(:all,:conditions =>“条件”)将不起作用。谢谢。 – Alex 2013-03-07 21:21:21

回答

0

该解决方案已被转换为不使用你的每一丝SQL。总之,抓住票据,循环它们,如果条件成立,从属性中删除特定的键。最后,用这些属性生成一个新的票据实例(不记录)。

我知道条件是一个外部的事情,但我会建议或者添加一个attr_accessor到该条件的对象上。我会在视图中利用这一点,以便不依赖于某个特定领域的存在或缺失来决定如何交付。我在这里做了一些假设,但解决方案让我对需要这种类型的操作的功能感到好奇。祝你好运。

all_tickets = Ticket.find(:all) 
processed_tickets = [] 
all_tickets.each do |ticket| 
    attributes = ticket.attributes 
    attributes.delete(:some_key) if some_condition? 
    processed_tickets << Ticket.new(attributes) 
end 
+0

请阅读我的提示,无法通过sql询问条件;-( all_tickets的计数是每次<10,所以迭代不应该是一个问题,谢谢! – Alex 2013-03-08 11:03:15