SitePoint Sponsor

User Tag List

Results 1 to 7 of 7

Hybrid View

  1. #1
    SitePoint Enthusiast
    Join Date
    Dec 2009
    Posts
    26
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Post story def list (shovell)

    Hey, what gives?

    I tried to use searchlogic gem to order data so I created "list" method in stories_controller.rb
    (excerpt)
    Code Ruby:
    def bin
    	#@stories=Story.find:all, :order=>'id DESC', :conditions=>'votes_count <5'
    	fetch_stories 'votes_count <5'
    	render :action=>'index'
    end
    def list
    	@stories=Story.find(:all)
    end
    list.html.erb
    Code Ruby:
    <h2><%= story_list_heading %></h2>
    <%= order @stories, :by => :name %>
    <%= render :partial=>'story_list', :collection=>@stories %>
    _story_list.html.erb (partial)
    Code Ruby:
    <% div_for(story) do %>
    	<p>
    		<span class="storyIdCol"><%= story.id %></span>,
    		<span class="storyCol"><%= link_to story.name, story %></span>,
    		<span class="storyLinkCol"><%= story.link %></span>,
    		<span class="storyUserCol"><%= story.user.login %></span>,
    		<span class="storyVotesCol">%= story.votes_count %></span>,
    		<span class="storyEditCol"><%= link_to 'Edit', edit_story_path(story) %></span>
    	</p>
    <% end %>

    But rails gives an error (http://localhost:3000/stories/list)
    ActiveRecord::RecordNotFound in StoriesController#show

    Couldn't find Story with ID=list

    Shorthand value "list_stories_path" isn't available.

  2. #2
    SitePoint Enthusiast
    Join Date
    Jan 2010
    Location
    Cleveland, OH
    Posts
    49
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Can you show me the code in your config/routes.rb file and the full stories controller?

  3. #3
    SitePoint Enthusiast
    Join Date
    Dec 2009
    Posts
    26
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Post

    config/routes.rb
    Code Ruby:
    ActionController::Routing::Routes.draw do |map|
      # You can have the root of your site routed with map.root -- just remember to delete public/index.html.
      # map.root :controller => "welcome"
      map.root :controller => "stories"
     
      # See how all your routes lay out with "rake routes"
     
      # Install the default routes as the lowest priority.
      map.resources :stories, :has_many=>:votes, :collection=>{:bin=>:get} #because of this we can use story_path (a helper), book page 235; page 245; custom routes book page 343
      map.resource :session #plural vs singular book page 287
      map.resources :users #book page 359
      map.resources :tags #book page 395
      map.connect ':controller/:action/:id'
      map.connect ':controller/:action/:id.:format'
    stories_controller.rb
    Code Ruby:
    class StoriesController < ApplicationController
    	before_filter :login_required, :only=>[:new, :create] #book page 307
      def index
    	@current_time=Time.now
    	#@stories=Story.find :all, :order=>'id DESC', :conditions=>'votes_count >=5'#this line rephrased, book page 341
    	fetch_stories 'votes_count >=5'
      end
      def new
    	@story=Story.new
      end
      def create #this is executed when form is submitted in new.html.erb, because form is for @sotry variable
    	#@story=Story.new(params[:story])#first line of code requires change, book page 309
    	@story=@current_user.stories.build params[:story] #new first line, book page 309
    	if @story.save
    		flash[:notice]='Story submission succeeded'
    		redirect_to stories_path #195 page in the book
    	else
    		render :action=>'new'
    	end
      end
    	def edit
    		@story=Story.find(params[:id])
    	end
    	def update
    		@story=Story.find(params[:id])
    		if @story.update_attributes(params[:story])
    			redirect_to :action=>'show', :id=>@story
    		else
    			render :action=>'edit'
    		end
    	end
    	def destroy
    		Story.find(params[:id]).destroy
    		redirect_to stories_path
    	end
    	  def show #the form submission is routed (rake routes) to VotesController create method
    		@story=Story.find(params[:id])
    	  end
    	def bin
    		#@stories=Story.find:all, :order=>'id DESC', :conditions=>'votes_count <5'
    		fetch_stories 'votes_count <5'
    		render :action=>'index'
    	end
    	def list
    		@stories=Story.find(:all)
    	end
     
    	protected
    	#If we were to make fetch_stories a publicly accessible method, it would be exposed via the URL [url]http://localhost:3000/stories/fetch_stories[/url], which is certainly not what we want! Book page 341
    	def fetch_stories(conditions)
    		#benchmarking book page 448
    		self.class.benchmark('Fetching stories') do
    			@stories=Story.find:all, :order=>'id DESC', :conditions=>conditions
    		end
    	end
    end

  4. #4
    SitePoint Enthusiast
    Join Date
    Feb 2003
    Location
    Akron, OH, USA
    Posts
    99
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    In order to use a "non RESTful" route you need use :collection on your route.

    This is what you have currently...
    Code Ruby:
    map.resources :stories, :has_many=>:votes, :collection=>{:bin=>:get}

    This is what you would need for it to work...
    Code Ruby:
    map.resources :stories, :has_many=>:votes, :collection=>{:bin=>:get, :list => :get}

  5. #5
    SitePoint Enthusiast
    Join Date
    Dec 2009
    Posts
    26
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Unhappy

    Can someone help me out?

    I would like to use searchlogic but I just don't understand how.
    The description just says "Now just set it as a dependency in your project and you are ready to go." How do I do that?

    I have it installed
    Code:
    C:\InstantRails\rails_apps\shovell>gem install searchlogic
    Successfully installed searchlogic-2.4.19
    1 gem installed
    Installing ri documentation for searchlogic-2.4.19...
    Installing RDoc documentation for searchlogic-2.4.19...
    
    C:\InstantRails\rails_apps\shovell>
    When I use it inside controller I get an error that "search" is not recognized
    stories_controller.rb
    Code Ruby:
    def list
    	@stories=Story.search.all
    end

  6. #6
    SitePoint Enthusiast
    Join Date
    Feb 2003
    Location
    Akron, OH, USA
    Posts
    99
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    In your environment.rb file you need to add the following line:

    Code Ruby:
    config.gem "searchlogic"

    It needs to be placed after this line:

    Code Ruby:
    Rails::Initializer.run do |config|

  7. #7
    SitePoint Enthusiast
    Join Date
    Dec 2009
    Posts
    26
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Post

    Can't start server if environment.rb includes "searchlogic"

    Code:
    C:\InstantRails\rails_apps\shovell>ruby script/server
    => Booting Mongrel (use 'script/server webrick' to force WEBrick)
    => Rails application starting on http://0.0.0.0:3000
    => Call with -d to detach
    => Ctrl-C to shutdown server
    ** Starting Mongrel listening at 0.0.0.0:3000
    ** Starting Rails with development environment...
    Exiting
    C:/InstantRails/rails_apps/shovell/config/environment.rb:31: private method `gem
    ' called for #<Rails::Configuration:0x305884c> (NoMethodError)
            from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/initial
    izer.rb:47:in `run'
            from C:/InstantRails/rails_apps/shovell/config/environment.rb:13
            from C:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require
    .rb:31:in `gem_original_require'
            from C:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require
    .rb:31:in `require'
            from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib
    /active_support/dependencies.rb:496:in `require'
            from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib
    /active_support/dependencies.rb:342:in `new_constants_in'
            from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib
    /active_support/dependencies.rb:496:in `require'
            from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/mongrel-1.1.5-x86-mswin
    32-60/bin/../lib/mongrel/rails.rb:147:in `rails'
             ... 20 levels...
            from C:/InstantRails/ruby/lib/ruby/gems/1.8/gems/rails-2.0.2/lib/command
    s/server.rb:39
            from C:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require
    .rb:31:in `gem_original_require'
            from C:/InstantRails/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require
    .rb:31:in `require'
            from script/server:3
    
    C:\InstantRails\rails_apps\shovell>
    shovell\config\environment.rb
    Code Ruby:
    # Specifies gem version of Rails to use when vendor/rails is not present
    RAILS_GEM_VERSION = '2.0.2' unless defined? RAILS_GEM_VERSION
     
    # Bootstrap the Rails environment, frameworks, and default configuration
    require File.join(File.dirname(__FILE__), 'boot')
     
    Rails::Initializer.run do |config|
      # Settings in config/environments/* take precedence over those specified here.
      # Application configuration should go into files in config/initializers
      # -- all .rb files in that directory are automatically loaded.
      # See Rails::Configuration for more options.
     
      # Skip frameworks you're not going to use (only works if using vendor/rails).
      # To use Rails without a database, you must remove the Active Record framework
      # config.frameworks -= [ :active_record, :active_resource, :action_mailer ]
     
      # Only load the plugins named here, in the order given. By default, all plugins 
      # in vendor/plugins are loaded in alphabetical order.
      # :all can be used as a placeholder for all plugins not explicitly named
      # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
     
      # Add additional load paths for your own custom dirs
      # config.load_paths += %W( #{RAILS_ROOT}/extras )
      ####config.gem "searchlogic"
      config.gem "searchlogic"
     
      # Force all environments to use the same logger level
      # (by default production uses :info, the others :debug)
      # config.log_level = :debug
     
      # Your secret key for verifying cookie session data integrity.
      # If you change this key, all old sessions will become invalid!
      # Make sure the secret is at least 30 characters and all random, 
      # no regular words or you'll be exposed to dictionary attacks.
      config.action_controller.session = {
        :session_key => '_shovell_session',
        :secret      => 'e6bbb9750cc4004808472b8b849ca3ce722608ccd3eed8c1ee84bfbe793f18deaf64543ea9d2fdf9d25817a0a445c7b4f6e979376b5702264bb010d8886cfc64'
      }
     
      # Use the database for sessions instead of the cookie-based default,
      # which shouldn't be used to store highly confidential information
      # (create the session table with 'rake db:sessions:create')
      # config.action_controller.session_store = :active_record_store
     
      # Use SQL instead of Active Record's schema dumper when creating the test database.
      # This is necessary if your schema can't be completely dumped by the schema dumper,
      # like if you have constraints or database-specific column types
      # config.active_record.schema_format = :sql
     
      # Activate observers that should always be running
      # config.active_record.observers = :cacher, :garbage_collector
     
      # Make Active Record use UTC-base instead of local time
      # config.active_record.default_timezone = :utc
    end


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •