Never been to TextSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

About this user

« Newer Snippets
Older Snippets »
12 total  XML / RSS feed 

rails sessions clearing

find -type f -name 'ruby_sess*' -amin +3 -exec \rm -f {} \;


By default rails does not clear out stale sessions from the session store. To implement this feature I added the following small snippet of code;
class SessionCleaner
  def self.remove_stale_sessions
    CGI::Session::ActiveRecordStore::Session.
      destroy_all( ['updated_on ', 20.minutes.ago] ) 
  end
end


And then invoke the remove_stale_sessions method every 10 minutes via;

*/10 * * * * ruby /full/path/to/script/runner 
   -e production "SessionCleaner.remove_stale_sessions"

timezones in rails

TZ

Install the tzinfo gem 
Install the tzinfo_timezone rails plugin 
Add a time_zone_id to the accounts (or users) table 
Set ActiveRecord::Base.default_time_zone to :utc 
Define user2utc and utc2user helpers (for converting times between the user’s time zone and UTC) 
Search through the code and find every place that either displays a date/time (strftime, etc.) or stores a user-entered time in the database, and make liberal use of user2utc and utc2user 

server

212.5.103.194

Создание значения для поля перед сохранением объекта в базу


  before_create :generate_smthng

  def generate_smthng
    @attributes['smthng'] = "smthng"
  end

Создание объектов не зная заранее их имени

Передать название класса
  for service in @services
    s = Object.const_get(service.name.classify)
  end


Сразу искать нужный объект в соответствующей таблице
  for service in @services
    s = Object.const_get(service.name.classify).find(service.s_id)
  end

scope in activerecord

arount_filter ScopeAccess::Filter.new(Secret,:mine) 


def mine 
   {:find=>{:conditions=>["user_id=?",1]}, :create=>{:user_id=>1}} 
end 


def index 
   @secrets=Secret.find(:all) 
end 


def new 
   secret = Secret.create(:name=>rand(10000)) 
   if (secret.new_record?) 
     flash[:notice] = "Could not create Secret" 
   end 
   redirect_to :action=>"index" 
end 

symbolic link

ln -s /home/user/railsapps/app1/public /home/user/public_html/app1

ActiveRecord DOM IDs

The solution—or at least a nice, cheap bandaid that can be applied easily, consists of adding a method to ActiveRecord::Base to help generate these ids without any brainpower involved.

Here’s a very simple implementation that I use in my projects, courtesy of Jamis Buck:



class ActiveRecord::Base
  def dom_id(prefix=nil)
    display_id = new_record? ? "new" : id
    prefix ||= self.class.name.underscore
    prefix != :bare ? "#{prefix.to_s.dasherize}-#{display_id}" : display_id
  end
endSo, you can do stuff like this in your views:

<ul>
<% @entries.each do |entry| %>
  
  • > <%= entry.body %>
  • <% end %> And stuff like this in your controller: def remove_entry entry = JournalEntry.find(params[:id]) update_page do |page| page[entry.dom_id].remove end end

    ruby stored procedures

    There are alot of reasons to use stored procedures. One of the most compelling reasons is that a system has already been built with stored procedures and interfacing with it cannot be by raw SQL. This situation is mainly caused by DBA’s whose job it is to control the flow of information into and out of the database. In “enterprise” situations this is the norm.


      @connection = OCI8.new("db_user", "db_password", "db_name")
    
      plsql = @connection.parse("BEGIN P_MYPROCEDURE.my_method(:out); END;")
      plsql.bind_param(':out', OCI8::Cursor) 
      plsql.exec
    
      cursor = plsql[':out']
      plsql.close
    
      x = ''
      while r = cursor.fetch()
        x = x + r.join(', ') + '
    ' end @out = x @connection.logout


    This code assumes you are using Rails 1.1 as an engine and that you have setup the database.yml for Oracle (10g in this post). The OCI8 object instantiated on the first line is in the OCI8 library which is loaded by Rails, specified in database.yml.

    Interfacing with Oracle and its stored procedures pretty much requires some knowledge about Oracle which has some very specific concepts that something like MySQL does not.

    First, to pass local variables to the stored procedure’s “in” and “out” variables, you must explicitly “bind” them.

    Second is the notion of “cursor”.

    Author: hksintl on http://blog.hksintl.com/

    Фильтр на обновление только разрешенных полей

    %w(name email address).each { |f| @person[f] = params[:person][f] }
    

    Перегрузка ошибок

    Перегрузка ошибок

    def error_messages_for(object_name, options = {})
            options = options.symbolize_keys
            object = instance_variable_get("@#{object_name}")
            if object && !object.errors.empty?
              content_tag("div",
                content_tag(
                  options[:header_tag] || "h2",
                  "Из-за #{object.errors.count} #{object.errors.count.items("ошибки", "ошибок", "ошибок")}  #{object_name.ru_name} не будет сохранена"
                ) +
                content_tag("p", "Следующие поля заполнены неверно:") +
                content_tag("ul", object.errors.full_messages.collect { |msg| content_tag("li", msg) }),
                "id" => options[:id] || "errorExplanation", "class" => options[:class] || "errorExplanation"
              )
            else
              ""
            end
           end
    

    Компоненты в rails

    У рельсов плохо с компонентами,
    потому что DHH не одобряет. В качестве
    опции:

    
    module Sidebar 
            def self.append_features(controller) 
                    controller.send(:before_filter, :generate_sidebar) 
                    controller.send(:helper_method, :sidebar) 
                    super(controller) 
            end 
    
            def generate_sidebar 
                    @sidebar_items = # bla bla bla 
            end 
    
            def sidebar 
                    render_to_string # bla bla bla 
            end 
    end 
    
    class SomeController < ApplciationController 
            include Sidebar 
    end 
    


    и в темплейтах где нада <%= sidebar %>

    естественно в таком случае следует
    аккуратно избегать рекурсии ;-)
    « Newer Snippets
    Older Snippets »
    12 total  XML / RSS feed