I'm new to RoR and databases in general. Here is my problem.
I have "Lists" and "Items". Instead of using a join table and a habtm
relationship, I created a third model so I can hold additional data in
it. It's called "Listitems". I want to be able to display only the
"Items" that have not yet been added to the certain "List".
I have:
class List < ActiveRecord::Base
has_many :listitems, :dependent => true
has_many :items, :through => :listitems
end
class Item < ActiveRecord::Base
has_many :listitems, :dependent => true
has_many :lists, :through => :listitems
end
class Listitem < ActiveRecord::Base
belongs_to :list
belongs_to :item
end
What kind of query should I be writing in my controller to get the
results I want.
class List
OTHER_ITEMS_SQL = <<-EOF
select * from items
where not exists
(select * from list_items.item_id = items.id and
list_items.list_id = ?)
EOF
# Get all items that do NOT belong to this list.
def other_items
Item.find_by_sql [OTHER_ITEMS_SQL, self.id]
end
end