On 17 January 2012 11:47, Agis A. <[email protected]> wrote:
> I'm a beginner to both Ruby and Rails and I'm currently reading the Agile
> development with Rails, in which I'm currently developing the cart of the
> store.
>
> I have a line_items model which belongs_to :products. This makes sense.
> Later in the example we use this code to check if a product is referenced 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
>
>   private
>
>     # ensure that there are no line items referencing this product
>
>     def ensure_not_referenced_by_any_line_item
>
>       if line_items.empty?
>
>         return true
>
>       else
>
>         errors.add(:base, 'Line Items present')
>
>         return false
>
>       end
>
>     end
>
> end
>
>
> 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 product.id 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 line_items.product.id == product.id ?

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.

Colin

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to