0

私は持っている:

User id:integer name:integer
class User
has_many :complete_tasks
end

Task id:integer style:string uid:string

CompleteTask id:integer style:string uid:string user_id:integer
class CompleteTask
belongs_to :user
end

DBにいくつかのレコードがあります

user = User.first

id:1 name:デン

tasks = Tasks.all

id:1 スタイル => "実行" uid => "川"

id:2 style => "ジャンプ" uid => "海"

id:3 style => "走る" uid =>"海"

id:4 style => "run" uid =>"river"

id:5 style => "実行" uid =>"森"

user.complete_tasks.all

id:1 スタイル => 「実行」uid => 「川」 user_id => 1

id:2 スタイル => 「ジャンプ」 uid => 「海」 user_id => 1

フィールド :style と :uid が一緒になって、モデル CompleteTask のフィールド :style と :uid に相当しないタスクからレコードを取得する方法。

4

2 に答える 2

0

私の理解が正しければ、完了したタスクと同じ ID を持たないすべてのタスクを見つけようとしています。

そのためには、次のような検索条件を使用する必要があります。

Task.find(:all, :conditions => { :complete => false });
于 2013-04-08T18:53:02.203 に答える
0

これは貧弱なデータベース モデルであり、別のものを使用することをお勧めします。モデル内のブール値またはそのようなもので、task完全かどうかを確認できます。とにかく、ここに解決策があります:

all_tasks = Task.all
complete_tasks = CompleteTask.all

complete_tasks.each do |complete_task|
    #find if there is a task with the corresponding uid and style in the complete tasks
    tasks = all_tasks.where(:uid => complete_task.uid, :style => complete_task.style)
    #remove it from all_tasks (all_tasks means tasks that haven't finished yet)
    all_tasks = @all_tasks -  tasks
end

return all_tasks
于 2013-04-08T19:38:21.747 に答える