Monthly Archives: December 2011

Create Button which does not Submit – Ruby on Rails

Just another quick post – how to create a button which does not submit a form when it’s clicked:

 'button', :onclick => 'alert('Button not Submitted - Hopefully!!!!'), :class => "my_class" %>

Let me know if you have any problems.

Advertisements

Devise Overriding Controller Route – Ruby on Rails

I ran into a bit of a problem today after implementing a search form that appeared on every page. When the login page was loaded I received the following error:

No route matches {:controller=>”devise/products”, :method=>:get, :action=>”search”}

The weird thing about this is that the route my search form uses does not mention devise in any way:

 'products', :action => 'search', :method => :get do %>

As you have probably already guessed, I’m using devise to handle my authentication. Unfortunately this seems to be overriding some of my routes whenever it co-exists with another form. Luckily there exists a very simple, although hard to find solution – simply add a forward slash before the controller definition:

 '/products', :action => 'search', :method => :get do %>

Here’s a quick link to the StackOverflow post which gave the answer, hopefully a few more links to it will make it a little easier to find for anyone else out there doing a search!

Re-Index Sunspot/Solr – Ruby on Rails

Just a very quick post on how to re-index Sunspot/Solr – simply open the console and enter the following command:

chris@chris-VirtualBox:~/site$ rake sunspot:solr:reindex

WARNING: 'task :t, arg, :needs => [deps]' is deprecated.  Please use 'task :t, [args] => [deps]' instead.
    at /usr/lib/ruby/gems/1.8/gems/sunspot_rails-1.2.1/lib/sunspot/rails/tasks.rb:41
chris@chris-VirtualBox:~/site$ 

That’s all there is to it, nice and easy!

Will_Paginate with Sunspot – Ruby on Rails

Hey all,

I’ve just gone through setting up will_paginate with sunspot 1.3, just thought I’d share in case anyone else has any troubles/improvements.

In my case I’m setting it up on a products model.

  #products.rb

  #Sunspot/Search
  searchable do
    text :title, :boost => 5
    text :description
  end

#products_controller.rb
  #Products search
  def search

    #Create vars
    search = Product.search do
      fulltext params[:search]
      paginate :page => params[:page] || 1, :per_page => 2
    end    

    #Retrieve results
    @products = search.results

    #Create responses
    respond_to do |format|
      format.html { render 'index' }
    end
  end

#Search partial - _search.html.erb
 'products', :action => 'search', :method => :get do %>
    '25', :class => 'search' %>

#Product display page - index.html.erb

    "products/product_line", :locals => {:product => product} %>

      
 false, :params => { :search_text => params[:search_text] } %>

Well that’s about it, if anyone needs any further info or has any tips, leave a comment and I’ll get back to you asap.

Uninstalling a Gem – Ruby on Rails

Due to a few recent issues with SunSpot (see my previous posts), I’ve decided to uninstall it until I have enough time to work on it properly. Once again, Ruby makes this pretty simple:


chris@chris-VirtualBox:~/site$ sudo gem uninstall sunspot
[sudo] password for chris: 

You have requested to uninstall the gem: sunspot-1.2.1 sunspot_rails-1.2.1 depends on [sunspot (= 1.2.1)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn]  y


Remove executables: sunspot-solr, sunspot-installer in addition to the gem? [Yn]  y


Removing sunspot-solr
Removing sunspot-installer


Successfully uninstalled sunspot-1.2.1

ActiveRecord::HasManyThroughAssociation NotFoundError – Ruby on Rails

I ran into a bit of a problem with a has_many relationship in rails today:

ActiveRecord::HasManyThroughAssociationNotFoundError in FeedbacksController#index

Could not find the association :sub_orders in model User

This turned out to be a fairly simple fix, I had forgotten to add a has_many relationship before adding the has_many :through => x relationship. There is a fairly detailed explanation on StackOverflow for anyone who is curious.