Skip to content
/ trollied Public

A slightly different take on a Rails shopping cart engine.

License

Notifications You must be signed in to change notification settings

kete/trollied

Repository files navigation

trollied

en.wiktionary.org/wiki/trollied

Extendable Ruby on Rails engine for adding shopping cart functionality to a Rails application. It does not assume shipping, price, or having a quantity. However, it does allow for more than one order per user placed in a trolley. Meant to be well suited to ordering digital records.

Requirements

Relies on there being a User model with a corresponding users table and current_user method available to get the user of a current session. Also assumes will_paginate is installed either as a plugin or a gem in your Rails app.

Set up

Currently only tested against Rails 2.3.5. Feel free to submit a pull request with Rails 3 support.

Install the gem:

gem install trollied

After installing the gem do the following to your app:

In the Rails::Initializer.run config block in config/environment.rb:

config.gem "trollied"

Now you need to run the migration generator to add the tables, etc. that Trollied needs to work. Do this in your apps’s root directory.

$ script/generate trollied_migrations
$ rake db:migrate # add environment if necessary, i.e. rake db:migrate RAILS_ENV=production

If you are like me and use automatic foreign key constraints, this may fail for the line items migration because of it having a polymorphic. Alter this:

t.integer :purchasable_item_id, :null => false

to

t.integer :purchasable_item_id, :null => false, :references => nil

and rerun the db:migrate command.

Decide which models can be trollied and do the following for each:

class SomeModel < ActiveRecord::Base

include GetsTrollied
set_up_to_get_trollied :described_as => :the_attribute_that_describes_the_instance_such_as_title_or_name

end

In your user model, you’ll also need to declare it has a trolley:

class User < ActiveRecord::Base

include HasTrolley

end

You’ll also need to add a trolley for each existing user in your system (new users are handled automatically). Here’s the command that can be run from your console:

User.add_trolleys_for_existing

Next you need to create corresponding nested routes for your controllers and your user account controller. Something like this in config/routes.rb:

ActionController::Routing::Routes.draw do |map|

map.resources :user do |user|
  user.resource :trolley, :only => :show do |trolley|
    trolley.resources :orders, :shallow => true
  end
end

map.resources :items, :has_many => :line_items

end

Then you need to adjust any templates that you want the user be able to add an instance of the model to his or her trolley from. Add this method in the template.

link_to_place_in_trolley(@instance_of_model)

Alternatively, you can use this if you want to prevent duplicate orders:

in_trolley_status_or_button_to_place_in_trolley(@instance_of_model)

You’ll also need to implement a helper that provides a link to the appropriate profile page for a user.

i.e.:

link_to_profile_for(user)

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

Copyright © 2011 Walter McGinnis. See LICENSE for details.

About

A slightly different take on a Rails shopping cart engine.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages