Question about a model example

I’m a beginner to both Ruby and Rails and I’m currently reading the
development with Rails, in which I’m currently developing the cart of

I have a line_items model which belongs_to :products. This makes
Later in the example we use this code to check if a product is
by any line items before we destroy it:

class Product < ActiveRecord::Base

has_many :line_items

before_destroy :ensure_not_referenced_by_any_line_item


# ensure that there are no line items referencing this product

def ensure_not_referenced_by_any_line_item

  if line_items.empty?

    return true


    errors.add(:base, 'Line Items present')

    return false




This makes sense to me except of one part: if line_items.empty? I can
only guess that *line_items *returns all the rows of the “line_items”
table that contain the of the currently instantiated Product
object, is that right? But how does the model knows what to fetch just
by “line_items”? Isn’t that too little info that we give to our model,
regarding the logic of the task it has to do? Don’t we have to declare
somewhere something like: return false if ==

Thanks in advance people!

On 17 January 2012 11:47, Agis A. [email protected] wrote:

has_many :line_items


return false if == ?
The fact that you have said has_many :line_items automatically makes a
method line_items available for any product that returns an array
(actually it is not strictly an array, but near enough) containing all
the line items for that product.

Similarly if you have a line item in @line_item then you can say
@line_item.product to get the associated product.

Have a look at the Rails Guide on ActiveRecord associations to find
all the methods that rails makes available.


I see.

Now I’ve upgraded my seeds.rb file, to add some entry into the
table and see how it works.
Actually I’ve added this line: LineItem.create (product_id: ‘8’,

but when I run rake db:seed I get this error:

rake db:seed

rake aborted!
/rails/depot/db/seeds.rb:55: syntax error, unexpected tLABEL

LineItem.create (product_id: 8, cart_id: 1)


My migration file for LineItems table is this:

On Tue, Jan 17, 2012 at 1:05 PM, Agis A. [email protected]

rake db:seed

rake aborted!
/rails/depot/db/seeds.rb:55: syntax error, unexpected tLABEL

LineItem.create (product_id: 8, cart_id: 1)

Remove the space before the ‘(’

LineItem.create(product_id: 8, cart_id: 1)

In newer versions of Ruby (1.9.3 and maybe earlier), this is not longer


Thank you! Silly me for missing that.