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
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.
Let me encourage you to go “fat model, skinny controller” and write that
query in the model’s class instead. Just call that method from the
controller. You’ll thank yourself later. Also, if I were doing it, I’d
name your join model “Listing”, which falls more trippingly from the
tongue than “ListItem”.