From 80b628ed89095188c70edf1ca49ee3129d19255c Mon Sep 17 00:00:00 2001 From: martyhines Date: Thu, 8 Aug 2013 20:58:00 -0400 Subject: [PATCH 01/20] Add autocomplete=off to location field --- app/views/devise/registrations/edit.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/devise/registrations/edit.html.haml b/app/views/devise/registrations/edit.html.haml index 4d97f7aa1..7c00fecc4 100644 --- a/app/views/devise/registrations/edit.html.haml +++ b/app/views/devise/registrations/edit.html.haml @@ -36,7 +36,7 @@ .control-group =f.label :location, 'Your location', :class => 'control-label' .controls - =f.text_field :location + =f.text_field :location, :autocomplete => "off" %span.help-inline This will be displayed on a map. You can be as detailed or vague as you like. From 0d5b2bbcce4f6c3ee7ae785b7edcec9e462cce0e Mon Sep 17 00:00:00 2001 From: martyhines Date: Thu, 8 Aug 2013 21:38:01 -0400 Subject: [PATCH 02/20] Added bio to member model --- app/models/member.rb | 2 +- db/migrate/20130809012511_add_bio_to_members.rb | 5 +++++ db/schema.rb | 3 ++- spec/models/member_spec.rb | 6 ++++++ 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 db/migrate/20130809012511_add_bio_to_members.rb diff --git a/app/models/member.rb b/app/models/member.rb index e66373e8c..237e89765 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -39,7 +39,7 @@ class Member < ActiveRecord::Base # Setup accessible (or protected) attributes for your model attr_accessible :login_name, :email, :password, :password_confirmation, :remember_me, :login, :tos_agreement, :show_email, - :location, :latitude, :longitude, :send_notification_email + :location, :latitude, :longitude, :send_notification_email, :bio # set up geocoding geocoded_by :location diff --git a/db/migrate/20130809012511_add_bio_to_members.rb b/db/migrate/20130809012511_add_bio_to_members.rb new file mode 100644 index 000000000..62a5a7706 --- /dev/null +++ b/db/migrate/20130809012511_add_bio_to_members.rb @@ -0,0 +1,5 @@ +class AddBioToMembers < ActiveRecord::Migration + def change + add_column :members, :bio, :text + end +end diff --git a/db/schema.rb b/db/schema.rb index 8263fb087..741064abc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130723110702) do +ActiveRecord::Schema.define(:version => 20130809012511) do create_table "account_types", :force => true do |t| t.string "name", :null => false @@ -113,6 +113,7 @@ ActiveRecord::Schema.define(:version => 20130723110702) do t.float "latitude" t.float "longitude" t.boolean "send_notification_email", :default => true + t.text "bio" end add_index "members", ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb index c453017be..2dc6be3c6 100644 --- a/spec/models/member_spec.rb +++ b/spec/models/member_spec.rb @@ -24,6 +24,12 @@ describe 'member' do @member.slug.should match(/member\d+/) end + it 'has a bio' do + @member.bio = 'I love seeds' + @member.save + @member.bio.should eq 'I love seeds' + end + it 'should have a default garden' do @member.save @member.gardens.count.should == 1 From 07efe0dc8d1b2f4aecc43f46fdb1e3cbc509f9c5 Mon Sep 17 00:00:00 2001 From: martyhines Date: Thu, 8 Aug 2013 22:18:18 -0400 Subject: [PATCH 03/20] Added bio to the member profile --- app/views/devise/registrations/edit.html.haml | 4 ++++ app/views/members/show.html.haml | 5 +++++ spec/factories/member.rb | 5 +++++ spec/views/devise/registrations/edit_spec.rb | 8 ++++++++ spec/views/members/show.html.haml_spec.rb | 16 ++++++++++++++++ 5 files changed, 38 insertions(+) diff --git a/app/views/devise/registrations/edit.html.haml b/app/views/devise/registrations/edit.html.haml index 4d97f7aa1..520704544 100644 --- a/app/views/devise/registrations/edit.html.haml +++ b/app/views/devise/registrations/edit.html.haml @@ -39,6 +39,10 @@ =f.text_field :location %span.help-inline This will be displayed on a map. You can be as detailed or vague as you like. + .control-group + =f.label :bio, :class => 'control-label' + .controls + =f.text_area :bio, :rows => 6, :class => 'input-block-level' %h2 Linked accounts diff --git a/app/views/members/show.html.haml b/app/views/members/show.html.haml index 84808bda6..f52c5028d 100644 --- a/app/views/members/show.html.haml +++ b/app/views/members/show.html.haml @@ -56,6 +56,11 @@ - if can? :update, @member %p = link_to 'Edit your profile', "edit", :class => 'btn btn-primary' + - if @member.bio + %h2 Bio + :markdown + #{ strip_tags @member.bio } + %h2 Gardens .tabbable %ul.nav.nav-tabs - first_garden = true diff --git a/spec/factories/member.rb b/spec/factories/member.rb index 5e5b7f455..f1bac1392 100644 --- a/spec/factories/member.rb +++ b/spec/factories/member.rb @@ -9,11 +9,16 @@ FactoryGirl.define do tos_agreement true confirmed_at Time.now show_email false + bio 'I love seeds' factory :no_tos_member do tos_agreement false end + factory :no_bio_member do + bio nil + end + factory :unconfirmed_member do confirmed_at nil end diff --git a/spec/views/devise/registrations/edit_spec.rb b/spec/views/devise/registrations/edit_spec.rb index 594bb9657..2f3981fc6 100644 --- a/spec/views/devise/registrations/edit_spec.rb +++ b/spec/views/devise/registrations/edit_spec.rb @@ -40,15 +40,23 @@ describe 'devise/registrations/edit.html.haml', :type => "view" do it 'has a heading' do assert_select "h2", "Profile details" end + it 'shows show_email checkbox' do assert_select "input[id=member_show_email][type=checkbox]" end + it "contains a gravatar icon" do assert_select "img", :src => /gravatar\.com\/avatar/ end + it 'contains a link to gravatar.com' do assert_select "a", :href => /gravatar\.com/ end + + it 'shows bio field' do + assert_select "textarea[id=member_bio]" + end + it 'shows location field' do assert_select "input[id=member_location][type=text]" end diff --git a/spec/views/members/show.html.haml_spec.rb b/spec/views/members/show.html.haml_spec.rb index 4c3c66e15..76e8e8d01 100644 --- a/spec/views/members/show.html.haml_spec.rb +++ b/spec/views/members/show.html.haml_spec.rb @@ -12,6 +12,11 @@ describe "members/show" do render end + it "shows the bio" do + assert_select "h2", "Bio" + rendered.should contain @member.bio + end + it "shows account creation date" do @time = @member.created_at rendered.should contain "Member since" @@ -27,6 +32,17 @@ describe "members/show" do end end + context 'no bio' do + before(:each) do + @member = FactoryGirl.create(:no_bio_member) + render + end + + it "doesn't show the bio" do + rendered.should_not contain "Bio" + end + end + context 'twitter' do context "no twitter" do it "doesn't show twitter link" do From e77f7fdf31c9d0547fd8dab4ea3df49299b3bbde Mon Sep 17 00:00:00 2001 From: martyhines Date: Tue, 20 Aug 2013 21:22:02 -0400 Subject: [PATCH 04/20] Added creator field to crops --- app/models/crop.rb | 3 ++- db/migrate/20130821011352_add_creator_to_crops.rb | 5 +++++ db/schema.rb | 4 +++- spec/factories/crop.rb | 1 + spec/factories/member.rb | 2 +- spec/models/crop_spec.rb | 5 +++++ 6 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20130821011352_add_creator_to_crops.rb diff --git a/app/models/crop.rb b/app/models/crop.rb index c8506be8a..46eadf535 100644 --- a/app/models/crop.rb +++ b/app/models/crop.rb @@ -1,12 +1,13 @@ class Crop < ActiveRecord::Base extend FriendlyId friendly_id :system_name, use: :slugged - attr_accessible :en_wikipedia_url, :system_name, :parent_id + attr_accessible :en_wikipedia_url, :system_name, :parent_id, :creator_id has_many :scientific_names has_many :plantings has_many :photos, :through => :plantings has_many :seeds + belongs_to :creator, :class_name => 'Member' belongs_to :parent, :class_name => 'Crop' has_many :varieties, :class_name => 'Crop', :foreign_key => 'parent_id' diff --git a/db/migrate/20130821011352_add_creator_to_crops.rb b/db/migrate/20130821011352_add_creator_to_crops.rb new file mode 100644 index 000000000..4da89b8d1 --- /dev/null +++ b/db/migrate/20130821011352_add_creator_to_crops.rb @@ -0,0 +1,5 @@ +class AddCreatorToCrops < ActiveRecord::Migration + def change + add_column :crops, :creator_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 770254e64..93fac0e29 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130819004549) do +ActiveRecord::Schema.define(:version => 20130821011352) do create_table "account_types", :force => true do |t| t.string "name", :null => false @@ -58,6 +58,7 @@ ActiveRecord::Schema.define(:version => 20130819004549) do t.string "slug" t.integer "parent_id" t.integer "plantings_count" + t.integer "creator_id" end add_index "crops", ["slug"], :name => "index_crops_on_slug", :unique => true @@ -114,6 +115,7 @@ ActiveRecord::Schema.define(:version => 20130819004549) do t.float "latitude" t.float "longitude" t.boolean "send_notification_email", :default => true + t.text "bio" end add_index "members", ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true diff --git a/spec/factories/crop.rb b/spec/factories/crop.rb index 76fd31433..108aad7f8 100644 --- a/spec/factories/crop.rb +++ b/spec/factories/crop.rb @@ -3,6 +3,7 @@ FactoryGirl.define do factory :crop do system_name "Magic bean" en_wikipedia_url "http://en.wikipedia.org/wiki/Magic_bean" + creator factory :tomato do system_name "Tomato" diff --git a/spec/factories/member.rb b/spec/factories/member.rb index 5e5b7f455..c1be268b7 100644 --- a/spec/factories/member.rb +++ b/spec/factories/member.rb @@ -2,7 +2,7 @@ FactoryGirl.define do sequence(:email) { |n| "member#{n}@example.com" } sequence(:login_name) { |n| "member#{n}" } - factory :member, aliases: [:author, :owner, :sender, :recipient] do + factory :member, aliases: [:author, :owner, :sender, :recipient, :creator] do login_name { generate(:login_name) } password 'password1' email { generate(:email) } diff --git a/spec/models/crop_spec.rb b/spec/models/crop_spec.rb index b1363004a..55386a7b4 100644 --- a/spec/models/crop_spec.rb +++ b/spec/models/crop_spec.rb @@ -23,6 +23,11 @@ describe Crop do @crop.to_s.should == 'Tomato' "#{@crop}".should == 'Tomato' end + + it 'has a creator' do + @crop.save + @crop.creator.should be_an_instance_of Member + end end context 'invalid data' do From 098595721b325c47b9e5e603ef45c30b014643a5 Mon Sep 17 00:00:00 2001 From: martyhines Date: Tue, 20 Aug 2013 21:46:22 -0400 Subject: [PATCH 05/20] Added crop creator to crop edit form --- app/controllers/crops_controller.rb | 1 + app/views/crops/edit.html.haml | 7 +++++++ spec/views/crops/edit.html.haml_spec.rb | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/app/controllers/crops_controller.rb b/app/controllers/crops_controller.rb index a1fa97914..b258ea119 100644 --- a/app/controllers/crops_controller.rb +++ b/app/controllers/crops_controller.rb @@ -45,6 +45,7 @@ class CropsController < ApplicationController # POST /crops # POST /crops.json def create + params[:crop][:creator_id] = current_member.id @crop = Crop.new(params[:crop]) respond_to do |format| diff --git a/app/views/crops/edit.html.haml b/app/views/crops/edit.html.haml index 2806be189..135f74a7c 100644 --- a/app/views/crops/edit.html.haml +++ b/app/views/crops/edit.html.haml @@ -1,3 +1,10 @@ - content_for :title, "Editing crop" +%p + Added by + = @crop.creator + = distance_of_time_in_words(@crop.created_at, Time.zone.now) + ago. + = render 'form' + diff --git a/spec/views/crops/edit.html.haml_spec.rb b/spec/views/crops/edit.html.haml_spec.rb index f8b3a4477..de5503b5b 100644 --- a/spec/views/crops/edit.html.haml_spec.rb +++ b/spec/views/crops/edit.html.haml_spec.rb @@ -9,6 +9,10 @@ describe "crops/edit" do render end + it "shows the creator" do + rendered.should contain "Added by #{@crop.creator} less than a minute ago." + end + it "renders the edit crop form" do assert_select "form", :action => crops_path(@crop), :method => "post" do assert_select "input#crop_system_name", :name => "crop[system_name]" From eaa8ca0084e1793faacdde0d77ab37280439ed4c Mon Sep 17 00:00:00 2001 From: martyhines Date: Tue, 20 Aug 2013 22:30:08 -0400 Subject: [PATCH 06/20] set default crop creator (rake task, deploy script, seeds) --- config/environments/development.rb | 1 + config/environments/production.rb | 1 + config/environments/staging.rb | 1 + config/environments/test.rb | 1 + db/seeds.rb | 20 ++++++++++++++++++-- lib/tasks/growstuff.rake | 15 +++++++++++++-- script/deploy-tasks.sh | 3 +++ 7 files changed, 38 insertions(+), 4 deletions(-) diff --git a/config/environments/development.rb b/config/environments/development.rb index 211170993..8386b8486 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -55,6 +55,7 @@ Growstuff::Application.configure do config.site_name = "Growstuff (dev)" config.analytics_code = '' config.currency = 'AUD' + config.bot_email = "noreply@growstuff.org" end config.after_initialize do diff --git a/config/environments/production.rb b/config/environments/production.rb index 08feba071..06952e9db 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -86,6 +86,7 @@ Growstuff::Application.configure do eos config.currency = 'AUD' + config.bot_email = "noreply@growstuff.org" end config.after_initialize do diff --git a/config/environments/staging.rb b/config/environments/staging.rb index 24f77f035..75cece50d 100644 --- a/config/environments/staging.rb +++ b/config/environments/staging.rb @@ -82,6 +82,7 @@ Growstuff::Application.configure do config.site_name = "Growstuff (staging)" config.analytics_code = '' config.currency = 'AUD' + config.bot_email = "noreply@growstuff.org" end config.after_initialize do diff --git a/config/environments/test.rb b/config/environments/test.rb index 6718e2e84..9d6affbe0 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -44,6 +44,7 @@ Growstuff::Application.configure do config.site_name = "Growstuff (test)" config.analytics_code = '' config.currency = 'AUD' + config.bot_email = "noreply@growstuff.org" end config.after_initialize do diff --git a/db/seeds.rb b/db/seeds.rb index 91ba3823a..85ec17c78 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -12,9 +12,10 @@ require 'csv' def load_data # for all Growstuff sites, including production ones - load_crops load_roles load_basic_account_types + create_cropbot + load_crops # for development environments only if Rails.env.development? @@ -34,7 +35,8 @@ def load_crops system_name,scientific_name,en_wikipedia_url = row @crop = Crop.create( :system_name => system_name, - :en_wikipedia_url => en_wikipedia_url + :en_wikipedia_url => en_wikipedia_url, + :creator_id => @cropbot_user.id ) @crop.scientific_names.create( :scientific_name => scientific_name @@ -102,6 +104,20 @@ def load_admin_users @wrangler_user.save! end +def create_cropbot + @cropbot_user = Member.create( + :login_name => "cropbot", + :email => Growstuff::Application.config.bot_email, + :password => SecureRandom.urlsafe_base64(64), + :tos_agreement => true + ) + @cropbot_user.confirm! + @cropbot_user.roles << @wrangler + @cropbot_user.save! + @cropbot_user.account.account_type = AccountType.find_by_name("Staff") + @cropbot_user.account.save +end + def load_paid_account_types puts "Adding 'paid' and 'seed' account types..." @paid_account = AccountType.create!( diff --git a/lib/tasks/growstuff.rake b/lib/tasks/growstuff.rake index 47a2a0416..949337355 100644 --- a/lib/tasks/growstuff.rake +++ b/lib/tasks/growstuff.rake @@ -128,9 +128,20 @@ namespace :growstuff do Crop.find_each do |c| Crop.reset_counters c.id, :plantings end - end - end + desc "August 2013: set default creator on existing crops" + task :set_default_crop_creator => :environment do + cropbot = Member.find_by_login_name("cropbot") + cropbot.account.account_type = AccountType.find_by_name("Staff") # set this just because it's nice + cropbot.account.save + raise "cropbot not found: create cropbot member on site or run rake db:seed" unless cropbot + Crop.find_each do |crop| + crop.creator = cropbot + crop.save + end + + end + end end diff --git a/script/deploy-tasks.sh b/script/deploy-tasks.sh index 41cd8f50c..c7b85de08 100755 --- a/script/deploy-tasks.sh +++ b/script/deploy-tasks.sh @@ -8,3 +8,6 @@ echo "2013-08-18 - reset crop planting counts" rake growstuff:oneoff:reset_crop_plantings_count + +echo "2013-08-21 - set default crop creator" +rake growstuff:oneoff:set_default_crop_creator From 29908351bec1c4643789395f59bc6ea420a8f051 Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 21 Aug 2013 17:36:48 +1000 Subject: [PATCH 07/20] die sooner if you can't find cropbot --- lib/tasks/growstuff.rake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tasks/growstuff.rake b/lib/tasks/growstuff.rake index 949337355..ac91207e1 100644 --- a/lib/tasks/growstuff.rake +++ b/lib/tasks/growstuff.rake @@ -134,9 +134,9 @@ namespace :growstuff do task :set_default_crop_creator => :environment do cropbot = Member.find_by_login_name("cropbot") + raise "cropbot not found: create cropbot member on site or run rake db:seed" unless cropbot cropbot.account.account_type = AccountType.find_by_name("Staff") # set this just because it's nice cropbot.account.save - raise "cropbot not found: create cropbot member on site or run rake db:seed" unless cropbot Crop.find_each do |crop| crop.creator = cropbot crop.save From a5b2db345852b7593602db4387cb0bd9b39fa75d Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 21 Aug 2013 17:40:06 +1000 Subject: [PATCH 08/20] added creator to scientific names --- app/models/scientific_name.rb | 3 ++- db/migrate/20130821073736_add_creator_to_scientific_name.rb | 5 +++++ db/schema.rb | 4 ++-- spec/factories/scientific_name.rb | 1 + spec/models/scientific_name_spec.rb | 5 +++++ 5 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20130821073736_add_creator_to_scientific_name.rb diff --git a/app/models/scientific_name.rb b/app/models/scientific_name.rb index 919b0639e..56c86b21b 100644 --- a/app/models/scientific_name.rb +++ b/app/models/scientific_name.rb @@ -1,4 +1,5 @@ class ScientificName < ActiveRecord::Base - attr_accessible :crop_id, :scientific_name + attr_accessible :crop_id, :scientific_name, :creator_id belongs_to :crop + belongs_to :creator, :class_name => 'Member' end diff --git a/db/migrate/20130821073736_add_creator_to_scientific_name.rb b/db/migrate/20130821073736_add_creator_to_scientific_name.rb new file mode 100644 index 000000000..0905a5c40 --- /dev/null +++ b/db/migrate/20130821073736_add_creator_to_scientific_name.rb @@ -0,0 +1,5 @@ +class AddCreatorToScientificName < ActiveRecord::Migration + def change + add_column :scientific_names, :creator_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 93fac0e29..5a131b028 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130821011352) do +ActiveRecord::Schema.define(:version => 20130821073736) do create_table "account_types", :force => true do |t| t.string "name", :null => false @@ -115,7 +115,6 @@ ActiveRecord::Schema.define(:version => 20130821011352) do t.float "latitude" t.float "longitude" t.boolean "send_notification_email", :default => true - t.text "bio" end add_index "members", ["confirmation_token"], :name => "index_users_on_confirmation_token", :unique => true @@ -235,6 +234,7 @@ ActiveRecord::Schema.define(:version => 20130821011352) do t.integer "crop_id", :null => false t.datetime "created_at", :null => false t.datetime "updated_at", :null => false + t.integer "creator_id" end create_table "seeds", :force => true do |t| diff --git a/spec/factories/scientific_name.rb b/spec/factories/scientific_name.rb index e1bffb5cd..43d9ad74a 100644 --- a/spec/factories/scientific_name.rb +++ b/spec/factories/scientific_name.rb @@ -2,6 +2,7 @@ FactoryGirl.define do factory :scientific_name do association :crop, factory: :crop scientific_name "Beanus Magicus" + creator factory :zea_mays do association :crop, factory: :maize diff --git a/spec/models/scientific_name_spec.rb b/spec/models/scientific_name_spec.rb index 7cfe62ea1..98734ec5a 100644 --- a/spec/models/scientific_name_spec.rb +++ b/spec/models/scientific_name_spec.rb @@ -16,6 +16,11 @@ describe ScientificName do @sn2 = ScientificName.find_by_scientific_name('Zea mays') @sn2.crop.system_name.should == "Maize" end + + it 'has a creator' do + @sn.save + @sn.creator.should be_an_instance_of Member + end end context 'invalid data' do From 836ed7aa85ddec1e3ea9877ca3b2accea8a1f212 Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 21 Aug 2013 17:52:10 +1000 Subject: [PATCH 09/20] Added creator to scientific name views etc --- app/controllers/scientific_names_controller.rb | 1 + app/views/scientific_names/edit.html.haml | 6 ++++++ spec/views/scientific_names/edit.html.haml_spec.rb | 4 ++++ 3 files changed, 11 insertions(+) diff --git a/app/controllers/scientific_names_controller.rb b/app/controllers/scientific_names_controller.rb index cb65fc999..202c3942c 100644 --- a/app/controllers/scientific_names_controller.rb +++ b/app/controllers/scientific_names_controller.rb @@ -45,6 +45,7 @@ class ScientificNamesController < ApplicationController # POST /scientific_names # POST /scientific_names.json def create + params[:scientific_name][:creator_id] = current_member.id @scientific_name = ScientificName.new(params[:scientific_name]) respond_to do |format| diff --git a/app/views/scientific_names/edit.html.haml b/app/views/scientific_names/edit.html.haml index 493ee3e44..db7f9bf71 100644 --- a/app/views/scientific_names/edit.html.haml +++ b/app/views/scientific_names/edit.html.haml @@ -1,3 +1,9 @@ - content_for :title, "Edit scientific name" +%p + Added by + = @scientific_name.creator + = distance_of_time_in_words(@scientific_name.created_at, Time.zone.now) + ago. + = render 'form' diff --git a/spec/views/scientific_names/edit.html.haml_spec.rb b/spec/views/scientific_names/edit.html.haml_spec.rb index 30e195f52..1b48c51cd 100644 --- a/spec/views/scientific_names/edit.html.haml_spec.rb +++ b/spec/views/scientific_names/edit.html.haml_spec.rb @@ -12,6 +12,10 @@ describe "scientific_names/edit" do render end + it "shows the creator" do + rendered.should contain "Added by #{@scientific_name.creator} less than a minute ago." + end + it "renders the edit scientific_name form" do assert_select "form", :action => scientific_names_path(@scientific_name), :method => "post" do assert_select "input#scientific_name_scientific_name", :name => "scientific_name[scientific_name]" From 183acff5f48b29785997c183877ae7cd856a4967 Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 21 Aug 2013 17:52:33 +1000 Subject: [PATCH 10/20] populate scientific names creator field --- db/seeds.rb | 4 ++-- lib/tasks/growstuff.rake | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/db/seeds.rb b/db/seeds.rb index 85ec17c78..e0f9c3792 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -28,7 +28,6 @@ def load_data puts "Done!" end - def load_crops puts "Loading crops..." CSV.foreach(Rails.root.join('db', 'seeds', 'crops.csv')) do |row| @@ -39,7 +38,8 @@ def load_crops :creator_id => @cropbot_user.id ) @crop.scientific_names.create( - :scientific_name => scientific_name + :scientific_name => scientific_name, + :creator_id => @cropbot_user.id ) end puts "Finished loading crops" diff --git a/lib/tasks/growstuff.rake b/lib/tasks/growstuff.rake index ac91207e1..8b9a1bada 100644 --- a/lib/tasks/growstuff.rake +++ b/lib/tasks/growstuff.rake @@ -141,6 +141,10 @@ namespace :growstuff do crop.creator = cropbot crop.save end + ScientificName.find_each do |sn| + sn.creator = cropbot + sn.save + end end end From 8f7becfa78dab5c7ea777c0bc3aae962f6363478 Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 21 Aug 2013 21:24:22 +1000 Subject: [PATCH 11/20] added a basic crop wrangler homepage --- app/controllers/crops_controller.rb | 9 +++++ app/models/ability.rb | 1 + app/views/crops/wrangle.html.haml | 38 ++++++++++++++++++++++ app/views/layouts/_header.html.haml | 2 ++ config/routes.rb | 3 ++ spec/controllers/crops_controller_spec.rb | 8 +++++ spec/views/crops/wrangle.html.haml_spec.rb | 35 ++++++++++++++++++++ 7 files changed, 96 insertions(+) create mode 100644 app/views/crops/wrangle.html.haml create mode 100644 spec/views/crops/wrangle.html.haml_spec.rb diff --git a/app/controllers/crops_controller.rb b/app/controllers/crops_controller.rb index b258ea119..6ce582322 100644 --- a/app/controllers/crops_controller.rb +++ b/app/controllers/crops_controller.rb @@ -15,6 +15,15 @@ class CropsController < ApplicationController end end + # GET /wrangle + def wrangle + @crops = Crop.recent.paginate(:page => params[:page]) + + respond_to do |format| + format.html + end + end + # GET /crops/1 # GET /crops/1.json def show diff --git a/app/models/ability.rb b/app/models/ability.rb index ece3e809f..b5fafd8ec 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -37,6 +37,7 @@ class Ability # only crop wranglers can create/edit/destroy crops if member.has_role? :crop_wrangler + can :wrangle, Crop can :manage, Crop can :manage, ScientificName end diff --git a/app/views/crops/wrangle.html.haml b/app/views/crops/wrangle.html.haml new file mode 100644 index 000000000..a52107f2d --- /dev/null +++ b/app/views/crops/wrangle.html.haml @@ -0,0 +1,38 @@ +- content_for :title, "Crop Wrangling" + + +%ul + %li= link_to "Requests for new crops", 'http://growstuff.org/posts/skud-20130319-requests-for-new-crops' + %li= link_to "Crop wrangler guidelines", "http://wiki.growstuff.org/index.php/Crop_wrangling" + %li= link_to "crop-wranglers mailing list", "http://lists.growstuff.org/listinfo/crop-wranglers" + %li= link_to "Add Crop", new_crop_path + +%h2 Recently added crops + +%div.pagination + = page_entries_info @crops, :model => "crops" + = will_paginate @crops + +%table.table.table-striped + %tr + %th System name + %th English Wikipedia URL + %th Scientific names + %th Added by + %th When + - @crops.each do |c| + %tr + %td= link_to c.system_name, c + %td= link_to c.en_wikipedia_url, c.en_wikipedia_url + %td + - c.scientific_names.each do |s| + = link_to s.scientific_name, s + %br/ + %td= link_to c.creator, c.creator + %td + = distance_of_time_in_words(c.created_at, Time.zone.now) + ago. + +%div.pagination + = page_entries_info @crops, :model => "crops" + = will_paginate @crops diff --git a/app/views/layouts/_header.html.haml b/app/views/layouts/_header.html.haml index 07c664a35..cdc2e60b1 100644 --- a/app/views/layouts/_header.html.haml +++ b/app/views/layouts/_header.html.haml @@ -43,6 +43,8 @@ = link_to("Inbox", notifications_path) %li= link_to "Shop", shop_path + - if current_member.has_role?(:crop_wrangler) + %li= link_to "Crop Wrangling", wrangle_crops_path - if current_member.has_role?(:admin) %li= link_to "Admin", admin_path diff --git a/config/routes.rb b/config/routes.rb index 5c29f3feb..341aacec8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -20,7 +20,10 @@ Growstuff::Application.routes.draw do match '/posts/author/:author' => 'posts#index', :as => 'posts_by_author' resources :scientific_names + + match 'crops/wrangle' => 'crops#wrangle', :as => 'wrangle_crops' resources :crops + resources :comments resources :roles resources :forums diff --git a/spec/controllers/crops_controller_spec.rb b/spec/controllers/crops_controller_spec.rb index 281882e29..27901bc06 100644 --- a/spec/controllers/crops_controller_spec.rb +++ b/spec/controllers/crops_controller_spec.rb @@ -11,6 +11,14 @@ describe CropsController do } end + describe "GET crop wrangler homepage" do + it 'fetches the crop wrangler homepage' do + get :wrangle + response.should be_success + response.should render_template("crops/wrangle") + end + end + describe "GET RSS feed" do it "returns an RSS feed" do get :index, :format => "rss" diff --git a/spec/views/crops/wrangle.html.haml_spec.rb b/spec/views/crops/wrangle.html.haml_spec.rb new file mode 100644 index 000000000..100beb01b --- /dev/null +++ b/spec/views/crops/wrangle.html.haml_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +describe "crops/wrangle" do + before(:each) do + @member = FactoryGirl.create(:crop_wrangling_member) + controller.stub(:current_user) { @member } + page = 1 + per_page = 2 + total_entries = 2 + @tomato = FactoryGirl.create(:tomato) + @maize = FactoryGirl.create(:maize) + crops = WillPaginate::Collection.create(page, per_page, total_entries) do |pager| + pager.replace([ @tomato, @maize ]) + end + assign(:crops, crops) + end + + it 'contains handy links for wranglers' do + render + rendered.should contain "Crop wrangler guidelines" + rendered.should contain "mailing list" + end + + it 'has a link to add a crop' do + render + assert_select "a", :href => new_crop_path + end + + it "renders a list of crops" do + render + assert_select "a", :text => "Maize" + assert_select "a", :text => "Tomato" + end + +end From c109905cb03d1c45533fc2e067340113824f6020 Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 21 Aug 2013 21:42:58 +1000 Subject: [PATCH 12/20] fixed recent activity sorting for posts --- app/controllers/comments_controller.rb | 3 +++ app/models/comment_sweeper.rb | 15 +++++++++++++++ app/models/post.rb | 6 +++++- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 app/models/comment_sweeper.rb diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 858153acd..543f120ae 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -1,5 +1,8 @@ class CommentsController < ApplicationController load_and_authorize_resource + + cache_sweeper :comment_sweeper + # GET /comments # GET /comments.json def index diff --git a/app/models/comment_sweeper.rb b/app/models/comment_sweeper.rb new file mode 100644 index 000000000..fed7b6f4c --- /dev/null +++ b/app/models/comment_sweeper.rb @@ -0,0 +1,15 @@ +class CommentSweeper < ActionController::Caching::Sweeper + observe Comment + + def after_create(comment) + expire_fragment('recent_posts') + end + + def after_update(comment) + end + + def after_destroy(comment) + expire_fragment('recent_posts') + end + +end diff --git a/app/models/post.rb b/app/models/post.rb index 2666e0956..3a853c18a 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -25,10 +25,14 @@ class Post < ActiveRecord::Base self.comments.count end + # return the timestamp of the most recent activity on this post + # i.e. the time of the most recent comment, or of the post itself if + # there are no comments. def recent_activity - self.comments.reorder.last ? self.comments.reorder.last.created_at : self.created_at + self.comments.present? ? self.comments.reorder('created_at DESC').first.created_at : self.created_at end + # return posts sorted by recent activity def Post.recently_active Post.all.sort do |a,b| b.recent_activity <=> a.recent_activity From 3e84d47c906edd4393337b86124ccf95f83973c8 Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 21 Aug 2013 21:57:43 +1000 Subject: [PATCH 13/20] fixed bug with tradable_to reverting to 'nowhere' --- app/views/seeds/_form.html.haml | 3 ++- spec/views/seeds/edit.html.haml_spec.rb | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/views/seeds/_form.html.haml b/app/views/seeds/_form.html.haml index 169463bc7..89ad5366f 100644 --- a/app/views/seeds/_form.html.haml +++ b/app/views/seeds/_form.html.haml @@ -22,7 +22,8 @@ .control-group = f.label 'Will trade:', :class => 'control-label' .controls - = f.select(:tradable_to, options_for_select(Seed::TRADABLE_TO_VALUES, 'nowhere')) + = f.select(:tradable_to, + options_for_select(Seed::TRADABLE_TO_VALUES, :selected => @seed.tradable_to || 'nowhere')) %span.help_inline - if current_member.location.blank? Don't forget to diff --git a/spec/views/seeds/edit.html.haml_spec.rb b/spec/views/seeds/edit.html.haml_spec.rb index f4193d0ef..f338dc46c 100644 --- a/spec/views/seeds/edit.html.haml_spec.rb +++ b/spec/views/seeds/edit.html.haml_spec.rb @@ -19,4 +19,11 @@ describe "seeds/edit" do assert_select "select#seed_tradable_to", :name => "seed[tradable_to]" end end + + it "doesn't revert tradable_to to nowhere" do + @seed = FactoryGirl.create(:tradable_seed, :owner => @member) + @seed.tradable_to.should_not eq "nowhere" + render + assert_select "option[selected=selected]", :text => @seed.tradable_to + end end From 238fd0b3ff1372b6bb26a0df8726e70cfb892a43 Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 21 Aug 2013 22:51:40 +1000 Subject: [PATCH 14/20] don't redirect to homepage after signin --- app/controllers/application_controller.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 5b50c25f3..556f811e6 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -3,6 +3,20 @@ class ApplicationController < ActionController::Base include ApplicationHelper + after_filter :store_location + + def store_location + # store last url - this is needed for post-login redirect to whatever the user last visited. + if (request.fullpath != new_member_session_path && \ + !request.xhr?) # don't store ajax calls + session[:previous_url] = request.fullpath + end + end + + def after_sign_in_path_for(resource) + session[:previous_url] || root_path + end + # tweak CanCan defaults because we don't have a "current_user" method # this means that we use current_user in specs but current_member everywhere # else in the code. From 908cf41f397fca1c9210b258852fd292c43a3851 Mon Sep 17 00:00:00 2001 From: Skud Date: Wed, 21 Aug 2013 23:42:16 +1000 Subject: [PATCH 15/20] tweaked thumbnail to take up less vertical space --- app/views/members/_thumbnail.html.haml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/app/views/members/_thumbnail.html.haml b/app/views/members/_thumbnail.html.haml index b6f265560..054ba4305 100644 --- a/app/views/members/_thumbnail.html.haml +++ b/app/views/members/_thumbnail.html.haml @@ -5,10 +5,11 @@ .span9 %p = link_to member.login_name, member - - if ! member.location.blank? - %br/ - %i= member.location - - if ! member.plantings.empty? - %br/ - Recently planted: - != member.plantings.first(3).map{|p| link_to p.crop_system_name, p }.join(", ") + %small + - if ! member.location.blank? + %br/ + %i= member.location + - if ! member.plantings.empty? + %br/ + Recently planted: + != member.plantings.first(3).map{|p| link_to p.crop_system_name, p }.join(", ") From cc97fd8f499521f5113a42b264ac8199b395c194 Mon Sep 17 00:00:00 2001 From: Skud Date: Thu, 22 Aug 2013 00:30:02 +1000 Subject: [PATCH 16/20] think we've FINALLY really fixed the member layout --- .../bootstrap_and_overrides.css.less | 11 ++++----- app/views/members/_thumbnail.html.haml | 24 ++++++++++--------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css.less b/app/assets/stylesheets/bootstrap_and_overrides.css.less index fa42eff62..e68946742 100644 --- a/app/assets/stylesheets/bootstrap_and_overrides.css.less +++ b/app/assets/stylesheets/bootstrap_and_overrides.css.less @@ -108,14 +108,9 @@ h3 { margin-left: 0px } -.three-across:nth-child(3):after { - content: "\A"; - white-space: pre; -} - .three-across:nth-child(3n+1) { margin-left: 0px; - clear: all; + clear: both; } // let's condense the hero unit a little @@ -152,6 +147,10 @@ p.stats { margin-left: 0px; } +.member-thumbnail { + line-height: 125% +} + // Overrides applying only to mobile view @media only screen and (max-width: 767px) { diff --git a/app/views/members/_thumbnail.html.haml b/app/views/members/_thumbnail.html.haml index 054ba4305..5a9592634 100644 --- a/app/views/members/_thumbnail.html.haml +++ b/app/views/members/_thumbnail.html.haml @@ -1,15 +1,17 @@ - cache "member_thumbnail_#{member.id}" do .row-fluid - .span3 - = render :partial => "members/image_with_popover", :locals => { :member => member } - .span9 - %p - = link_to member.login_name, member - %small + .member-thumbnail + .span3 + = render :partial => "members/image_with_popover", :locals => { :member => member } + .span9 + %p + = link_to member.login_name, member - if ! member.location.blank? - %br/ - %i= member.location + %small + %br/ + %i= member.location - if ! member.plantings.empty? - %br/ - Recently planted: - != member.plantings.first(3).map{|p| link_to p.crop_system_name, p }.join(", ") + %small + %br/ + Recently planted: + != member.plantings.first(3).map{|p| link_to p.crop_system_name, p }.join(", ") From 960d3064f56677f4c179fcf5d6afc02a0e60dcf5 Mon Sep 17 00:00:00 2001 From: Skud Date: Thu, 22 Aug 2013 00:35:14 +1000 Subject: [PATCH 17/20] don't like this line-height --- app/assets/stylesheets/bootstrap_and_overrides.css.less | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css.less b/app/assets/stylesheets/bootstrap_and_overrides.css.less index e68946742..6bc825068 100644 --- a/app/assets/stylesheets/bootstrap_and_overrides.css.less +++ b/app/assets/stylesheets/bootstrap_and_overrides.css.less @@ -147,10 +147,6 @@ p.stats { margin-left: 0px; } -.member-thumbnail { - line-height: 125% -} - // Overrides applying only to mobile view @media only screen and (max-width: 767px) { From 5de6d4389f5ce9b114d8a406501bbea7dfa97f92 Mon Sep 17 00:00:00 2001 From: Skud Date: Thu, 22 Aug 2013 10:18:02 +1000 Subject: [PATCH 18/20] Oops, we weren't caching interesting members --- app/views/home/_members.html.haml | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/app/views/home/_members.html.haml b/app/views/home/_members.html.haml index 884c25a7f..fd87104e1 100644 --- a/app/views/home/_members.html.haml +++ b/app/views/home/_members.html.haml @@ -1,16 +1,17 @@ -- members = Member.interesting.first(6) -- if members.present? - %h2 Some of our members +- cache "interesting_members" do + - members = Member.interesting.first(6) + - if members.present? + %h2 Some of our members - .visible-desktop.visible-tablet - .row-fluid + .visible-desktop.visible-tablet + .row-fluid + - members.each do |m| + .span6.homepage-members + = render :partial => "members/thumbnail", :locals => { :member => m } + + .visible-phone - members.each do |m| - .span6.homepage-members - = render :partial => "members/thumbnail", :locals => { :member => m } + = render :partial => "members/thumbnail", :locals => { :member => m } - .visible-phone - - members.each do |m| - = render :partial => "members/thumbnail", :locals => { :member => m } - - %p.text-right - = link_to "View all members »", members_path + %p.text-right + = link_to "View all members »", members_path From b47771d29c56d173fe46f471f31bb73d4fdb6ccb Mon Sep 17 00:00:00 2001 From: Skud Date: Thu, 22 Aug 2013 10:18:16 +1000 Subject: [PATCH 19/20] We need to refresh member thumbnails more often --- app/models/garden_sweeper.rb | 4 ++++ app/models/planting_sweeper.rb | 2 ++ app/models/seed_sweeper.rb | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/app/models/garden_sweeper.rb b/app/models/garden_sweeper.rb index a504207c4..3913a7c11 100644 --- a/app/models/garden_sweeper.rb +++ b/app/models/garden_sweeper.rb @@ -3,10 +3,14 @@ class GardenSweeper < ActionController::Caching::Sweeper def after_create(garden) expire_fragment('homepage_stats') + expire_fragment('interesting_members') if garden.owner.interesting? + expire_fragment("member_thumbnail_#{garden.owner.id}") end def after_destroy(garden) expire_fragment('homepage_stats') + expire_fragment('interesting_members') if garden.owner.interesting? + expire_fragment("member_thumbnail_#{garden.owner.id}") end end diff --git a/app/models/planting_sweeper.rb b/app/models/planting_sweeper.rb index 4f5b5f0e8..8e8de10df 100644 --- a/app/models/planting_sweeper.rb +++ b/app/models/planting_sweeper.rb @@ -4,6 +4,7 @@ class PlantingSweeper < ActionController::Caching::Sweeper def after_create(planting) expire_fragment('homepage_stats') expire_fragment("member_thumbnail_#{planting.owner.id}") + expire_fragment("interesting_members") if planting.owner.interesting? expire_fragment("crop_image_#{planting.crop.id}") end @@ -17,6 +18,7 @@ class PlantingSweeper < ActionController::Caching::Sweeper expire_fragment('homepage_stats') expire_fragment("crop_image_#{planting.crop.id}") expire_fragment('interesting_plantings') if planting.interesting? + expire_fragment("interesting_members") if planting.owner.interesting? end end diff --git a/app/models/seed_sweeper.rb b/app/models/seed_sweeper.rb index 5eb312286..1b7d663a4 100644 --- a/app/models/seed_sweeper.rb +++ b/app/models/seed_sweeper.rb @@ -5,6 +5,8 @@ class SeedSweeper < ActionController::Caching::Sweeper if seed.tradable? && seed.interesting? expire_fragment('interesting_seeds') end + expire_fragment('interesting_members') if seed.owner.interesting? + expire_fragment("member_thumbnail_#{seed.owner.id}") end def after_update(seed) @@ -15,6 +17,8 @@ class SeedSweeper < ActionController::Caching::Sweeper if seed.tradable? && seed.interesting? expire_fragment('interesting_seeds') end + expire_fragment('interesting_members') if seed.owner.interesting? + expire_fragment("member_thumbnail_#{seed.owner.id}") end end From 656edefb5f5c3266206997fbf03ba20b3237d4e9 Mon Sep 17 00:00:00 2001 From: Skud Date: Thu, 22 Aug 2013 10:18:33 +1000 Subject: [PATCH 20/20] Eager loading for frequently-accessed/database-heavy pages --- app/controllers/crops_controller.rb | 4 ++-- app/controllers/plantings_controller.rb | 7 ++++--- app/controllers/posts_controller.rb | 8 ++++---- app/controllers/seeds_controller.rb | 5 +++-- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/app/controllers/crops_controller.rb b/app/controllers/crops_controller.rb index b258ea119..b63ac1328 100644 --- a/app/controllers/crops_controller.rb +++ b/app/controllers/crops_controller.rb @@ -6,7 +6,7 @@ class CropsController < ApplicationController # GET /crops # GET /crops.json def index - @crops = Crop.paginate(:page => params[:page]) + @crops = Crop.includes(:scientific_names, {:plantings => :photos}).paginate(:page => params[:page]) respond_to do |format| format.html # index.html.haml @@ -18,7 +18,7 @@ class CropsController < ApplicationController # GET /crops/1 # GET /crops/1.json def show - @crop = Crop.find(params[:id]) + @crop = Crop.includes(:scientific_names, {:plantings => :photos}).find(params[:id]) respond_to do |format| format.html # show.html.haml diff --git a/app/controllers/plantings_controller.rb b/app/controllers/plantings_controller.rb index d8c75d9cd..740edb5b3 100644 --- a/app/controllers/plantings_controller.rb +++ b/app/controllers/plantings_controller.rb @@ -6,10 +6,11 @@ class PlantingsController < ApplicationController # GET /plantings # GET /plantings.json def index - @plantings = Planting.paginate(:page => params[:page]) @owner = Member.find_by_slug(params[:owner]) if @owner - @plantings = @owner.plantings.paginate(:page => params[:page]) + @plantings = @owner.plantings.includes(:owner, :crop, :garden).paginate(:page => params[:page]) + else + @plantings = Planting.includes(:owner, :crop, :garden).paginate(:page => params[:page]) end respond_to do |format| @@ -22,7 +23,7 @@ class PlantingsController < ApplicationController # GET /plantings/1 # GET /plantings/1.json def show - @planting = Planting.find(params[:id]) + @planting = Planting.includes(:owner, :crop, :garden, :photos).find(params[:id]) respond_to do |format| format.html # show.html.erb diff --git a/app/controllers/posts_controller.rb b/app/controllers/posts_controller.rb index c7abf48fd..b7167e9d2 100644 --- a/app/controllers/posts_controller.rb +++ b/app/controllers/posts_controller.rb @@ -7,10 +7,11 @@ class PostsController < ApplicationController # GET /posts.json def index - @posts = Post.paginate(:page => params[:page]) @author = Member.find_by_slug(params[:author]) if @author - @posts = @author.posts.paginate(:page => params[:page]) + @posts = @author.posts.includes(:author, { :comments => :author }).paginate(:page => params[:page]) + else + @posts = Post.includes(:author, { :comments => :author }).paginate(:page => params[:page]) end respond_to do |format| @@ -23,8 +24,7 @@ class PostsController < ApplicationController # GET /posts/1 # GET /posts/1.json def show - @post = Post.find(params[:id]) - @comments = @post.comments + @post = Post.includes(:author, { :comments => :author }).find(params[:id]) respond_to do |format| format.html # show.html.haml diff --git a/app/controllers/seeds_controller.rb b/app/controllers/seeds_controller.rb index a5b6cd526..0af8794d5 100644 --- a/app/controllers/seeds_controller.rb +++ b/app/controllers/seeds_controller.rb @@ -6,10 +6,11 @@ class SeedsController < ApplicationController # GET /seeds # GET /seeds.json def index - @seeds = Seed.paginate(:page => params[:page]) @owner = Member.find_by_slug(params[:owner]) if @owner - @seeds = @owner.seeds.paginate(:page => params[:page]) + @seeds = @owner.seeds.includes(:owner, :crop).paginate(:page => params[:page]) + else + @seeds = Seed.includes(:owner, :crop).paginate(:page => params[:page]) end respond_to do |format|