Never been to ShareSnippets before?

ShareSnippets е публично хранилище за програмен код. Лесно можете да съберете собствена колекция от отрязъци от код, да ги систематизирате с етикети, ключови думи, и да ги споделите (или ако не искате, да ги запазите за себе си!)

« По-нови Отрязъци
По-стари Отрязъци »
19 общо  XML / RSS  

Коя година сме ?

Забравяте да променяте годината в подписа(bottom) на сайта си или по лошо в сайта на клиент !

Helper code:
  def current_year
      Time.now.strftime('%Y')
  end


View:
"...Всички права запазени <%= current_year %> ...."

Имате инсталиран Rails 2.0.x, а искате да създадете проект с 1.2.6

Имате инсталиран Rails 2.0.x, а искате да създадете проект с 1.2.6 - Преди всичко трябва да имате инсталиран rails 1.2.6 gem след което:

rails _1.2.6_ името_на_проекта

Не броими имена - Ruby on Rails - Rest

Не броими имена и Rest Rails - Например: News

 map.resources :news -> map.resources :news, :singular => :news_instance

 news_path() /news
 new_news_instance_path() /news/new
 news_instance_path(1) /news/1
 edit_news_instance_path(1) /news/1;edit

 #edit
 <% form_for(@news, :url=>  news_instance_path(@news)) do |f| %>

 ......

 if @news.save
   format.html { redirect_to news_instance_path(@news) }
 ......

Импорт на CSV файл с ruby

Импорт на CSV файл с ruby

Пример с FasterCSV
sudo gem install fastercsv

require 'rubygems'
require 'fastercsv' 

FasterCSV.foreach('./imAreas.csv') do |row|
	e1 = row[0]
	e2 = row[2]
	e3 = row[3]
        .........
end

Инсталация на TinyMCE в RoR приложение

Инсталация на TinyMCE в RoR приложение:

1. Плъгин
cd vendor/plugins
 svn export https://secure.near-time.com/svn/plugins/trunk/tiny_mce

2. Инсталация в приложението
  rake tiny_mce:scripts:install

3. Използване:
Във вашия layout добавете:
(Препоръката е да се добави преди останалите javascipt)
	<%= javascript_include_tiny_mce_if_used %>
	<%= tiny_mce if using_tiny_mce? %>

В използваният контролер:
class Admin::BaseController < ApplicationController
  layout 'admin'
  uses_tiny_mce(:options => {:theme => 'advanced',
                             :browsers => %w{msie gecko},
                             :theme_advanced_toolbar_location => "top",
                             :theme_advanced_toolbar_align => "left",
                             :theme_advanced_resizing => true,
                             :theme_advanced_resize_horizontal => false,
                             :paste_auto_cleanup_on_paste => true,
                             :theme_advanced_buttons1 => %w{formatselect fontselect fontsizeselect bold italic underline strikethrough separator justifyleft justifycenter justifyright indent outdent separator bullist numlist forecolor backcolor separator link unlink image undo redo},
                             :theme_advanced_buttons2 => [],
                             :theme_advanced_buttons3 => [],
                             :plugins => %w{contextmenu paste}},
                :only => [:new, :edit, :show, :index])  
.....

Rails migration - типове данни

Rails migration - типове данни

:integer
:float
:datetime
:date
:timestamp
:time
:text
:string
:binary
:boolean

Rails - link_to Back

link_to "Back" ....

Вариант 1:
<%= link_to_unless request.env['HTTP_REFERER'].nil?, 'back', request.env['HTTP_REFERER']%>


Вариант 2:
<%= link_to 'back', request.env['HTTP_REFERER'] unless request.env['HTTP_REFERER'].nil?%>

Rails - Gettext - undefined method `untranslate_all?

След изпълнение на "rake updatepo" получавате следната грешка: undefined method `untranslate_all?
Проблема се появява след ъпдейт на ruby gem - gettext до версия 1.10.0

Решението:

requiregettext/rails’
class ApplicationController < ActionController::Base


Преместете в config/environment.rb:
requiregettext/rails’


Проблема идва от това, че в новата версия на gettext gem е променено следното в lib/gettext/parser/active_record.rb:
....
     begin
              ENV["RAILS_ENV"] = @config[:db_mode]
              requireconfig/boot.rb’
              requireconfig/environment.rb’
#             require ‘app/controllers/application.rb’
....


Как да използваме Gettext за превод на ruby on rails сайт/приложение можем да прочетем тук:
http://manuals.rubyonrails.com/read/chapter/105

Dreamhost инсталация на собствен gem...

Инсталация на rubygems в директорията на Вашият потребител:


Следвайте стъпките описани тук:
http://wiki.dreamhost.com/RubyGems


Ако след преминаване по описаните стъпки имате проблем от сорта на:

gem install -y radiant
Bulk updating Gem source index for: http://gems.rubyforge.org
Killed


Направете следното(USERNAME - потребителя с който се логвате в Вашият акаунт през ssh...):
rm -rf /home/USERNAME/.gems/source_cache

Dreamhost - Ruby on Rails - Error 500

Dreamhost - Ruby on Rails - хостинг на сайт/приложение и грешка - Error 500

RailsFCGIHandler.process! nil, 10

class RailsFCGIHandler
  private
    def frao_handler(signal)
      dispatcher_log :info, "asked to terminate immediately"
      dispatcher_log :info, "frao handler working its magic!"
      restart_handler(signal)
    end
    alias_method :exit_now_handler, :frao_handler
end

Dreamhost - хостинг на rails сайт приложение - dispatch.fcgi

Dreamhost хостинг на rails приложение сайт. dispatch.fcgi

#!/usr/bin/env ruby
require File.dirname(__FILE__) + "/../config/environment"
require 'fcgi_handler'

class RailsFCGIHandler
 private
    def frao_handler(signal)
         dispatcher_log :info, "asked to terminate immediately"
              dispatcher_log :info, "frao handler working its magic!"
               restart_handler(signal)
        end
        alias_method :exit_now_handler, :frao_handler
  end

RailsFCGIHandler.process!

Attachment_FU: Използване на един модел за качване на снимки от няколко модела

Използване на един модел за качване на снимки от няколко модела. Така наречената "polymorphic" асоциация.

Таблица за attachment_fu модел:
    create_table :images do |t|
      t.column :parent_id,    :integer
      t.column :content_type, :string 
      t.column :filename,     :string
      t.column :thumbnail,    :string
      t.column :size,         :integer
      t.column :width,        :integer
      t.column :height,       :integer 
      t.column :user_id,    :integer                  
      t.column :asset_id, :integer                  
      t.column :asset_type, :string      
    end


Магията започва тук :

      t.column :asset_id, :integer                  
      t.column :asset_type, :string


Модел за Attachment_fu: Image

class Image < ActiveRecord::Base
  belongs_to :asset, :polymorphic => true, :dependent => :destroy
.....


Искаме да добавим снимка към друг модел:

class Link < ActiveRecord::Base
  has_one :image, :class_name => 'Image', :as => :asset, :dependent => :destroy
.... 


Link контролер:

class LinksController < ApplicationController

  def new
    @link = Link.new
  end

  def create
    @link = Link.new(params[:link])
    if !params[:image][:uploaded_data].blank?
      @image = Image.new(params[:image])
      @link.image = @image
    end
    if @link.save
      flash[:notice] = 'Линка е добавен успешно !'
      redirect_to :action => 'list'
    else
      render :action => 'new'
    end
  end

  def edit
    @link = Link.find(params[:id])
    @image = @link.image
  end

  def update
    @link = Link.find(params[:id])
    @link.attributes = params[:link]
    if !params[:image][:uploaded_data].blank?
      @image = Image.new(params[:image])
      @link.image = @image      
    end
    if @link.update_attributes(params[:link])
      flash[:notice] = 'Линка беше променен !'
      redirect_to :action => 'list'
    else
      render :action => 'edit'
    end
  end

Attachment_FU: Валидация - Част II

Създаване на собствена валидация.

  has_attachment :content_type => :image, 
                   :storage => :file_system, 
                   :max_size => 200.kilobytes,
                   :resize_to => '320x240>',
                   :thumbnails => { :thumb => '100x100>' }


   def validate
     errors.add("empty", "Изберете снимка на проекта") unless self.filename
     unless self.filename == nil

       # Images should only be GIF, JPEG, or PNG
       [:content_type].each do |attr_name|
         enum = attachment_options[attr_name]
         unless enum.nil? || enum.include?(send(attr_name))
           errors.add("type","Файла който сте избрал е различен от JPEG, PNG или GIF")
         end
       end

       # Images should be less than 5 MB
       [:size].each do |attr_name|
         enum = attachment_options[attr_name]
         unless enum.nil? || enum.include?(send(attr_name))
           errors.add("size", "Файла който сте избрал е с големина по-голяма от максималната 200 KB")
         end
       end
     end
   end

Някъде в някоя форма :)

<%= error_message_on 'image', 'empty' %>
<%= error_message_on 'image', 'size' %>
<%= error_message_on 'image', 'type' %>

Attachment_FU: Валидация

Модел:
has_attachment :content_type => :image, 
                   :storage => :file_system, 
                   :max_size => 100.kilobytes,
                   :resize_to => '320x240>',
                   :thumbnails => { :thumb => '100x100>' }
  
  validates_attachment  :content_type => "Файла който сте избрал е различен от JPEG, PNG или GIF",
                        :empty => 'Изберете файл',
                        :size => "Файла който сте избрал е с големина по-голяма от максималната позволена големина от 100 KB"

Добавете в:
RAILS_APP/vendor/plugins/attachment_fu/init.rb

Следният код:
Technoweenie::AttachmentFu::InstanceMethods.module_eval do
  protected
    def attachment_valid?
      if self.filename.nil?
        errors.add_to_base attachment_validation_options[:empty]
        return
      end
      [:content_type, :size].each do |option|
        if attachment_validation_options[option] && attachment_options[option] && !attachment_options[option].include?(self.send(option))
          errors.add_to_base attachment_validation_options[option]
        end
      end
    end
end

Technoweenie::AttachmentFu::ClassMethods.module_eval do
  # Options: 
  # *  <tt>:empty</tt> - Base error message when no file is uploaded. Default is "No file uploaded" 
  # *  <tt>:content_type</tt> - Base error message when the uploaded file is not a valid content type.
  # *  <tt>:size</tt> - Base error message when the uploaded file is not a valid size.
  #
  # Example:
  #   validates_attachment :content_type => "The file you uploaded was not a JPEG, PNG or GIF",
  #                        :size         => "The image you uploaded was larger than the maximum size of 10MB" 
  def validates_attachment(options={})
    options[:empty] ||= "No file uploaded" 
    class_inheritable_accessor :attachment_validation_options
    self.attachment_validation_options = options
    validate :attachment_valid?
  end

Rails Проект: Пренасяне на вече качени снимки към file_column плъгин

Имали сте сайт написан примерно на PHP преминавате към RubyOnRails и искате да пренесете вече качените снимки към новата си система в която използвате file_column плъгин например или сте имали например по една снимка към запис и искате да преминете към вариант галерия към всеки запис.(Примера е с преминаване към галерия за всеки запис):

      path = "#{RAILS_ROOT}/public/myimages/"
        records = YourModel.find :all
        for record in records
          begin
            if !record.picture.empty?
              YourMolelPicture.create(
              :parent_id => record.id,
              :file => File.open("#{path}#{record.picture}")
              )
            end
          rescue
            И какво се случва при грешка :)
          end

Сортиране на данни в таблица по колони

Сортиране на данни в таблица по колони в rubyonrails проект съчетано с will_paginate плъгин. Helper методите в примера работят със стил за промяна на вида - визуализиране на колоната и посоката и на сортиране. Например може да се направи стил с иконка стрелка за посоката на сортиране.

Helpers:
  def sort_th(value)
    result = 'id="sorted_by_asc"' if params[:sort] == value
    result = 'id="sorted_by_desc"' if params[:sort] == value + "_desc"
    return result
  end

  def sort_link(text, action, value)
    key = value
    key += "_desc" if params[:sort] == value
    link_to text, :action => action, :sort => key
  end


Controller:
 def list
    @page = params[:page]
    @sort = params[:sort]
    @results = Model.paginate :page => @page, :per_page => 5, :order => order_value(@sort)
  end


View:
  <tr>
    <th <%=sort_th "name"%>>
      <%=sort_link("Име", "list", "name")%>
    </th>
    <th <%=sort_th "address"%>>
      <%=sort_link("Адрес", "list", "address")%>
    </th>

.....
<%= will_paginate @results, :sort=>@sort %>

Subversion и RubyOnRails проект...

svn remove log/* --force
svn commit -m "removing all log files from subversion"
svn propset svn:ignore "*.log" log/ --force
svn update log/
svn commit -m "Ignoring all files in /log/ ending in .log"
svn propset svn:ignore "*" tmp/sessions tmp/cache tmp/sockets
svn commit -m "Ignoring all files in /tmp/"
svn remove tmp/*
svn propset svn:ignore "*" tmp/
svn update tmp/
svn commit -m "ignore tmp/ content from now"

Валидиция за формат на поле - да съдържа само числа

Добавете за съответното поле във вашият модел:
 validates_format_of :param, :with => /^[0-9]+$/i, :message =>'Param: може да бъде само....'

Кирилица и UTF8 - rubyonrails проект.

Добавете във вашият ApplicationController следното:

class ApplicationController < ActionController::Base
.....

  before_filter :set_default_content_type
  after_filter :set_default_content_type

  def set_default_content_type
    headers["Content-Type"] = "text/html; charset=utf-8"
    suppress(ActiveRecord::StatementInvalid) do
      ActiveRecord::Base.connection.execute 'SET NAMES UTF8'
    end
  end
.....


database.yml

  adapter: mysql
  database: DATABASE
  username: root
  password:
  host: localhost
  encoding: UTF8
« По-нови Отрязъци
По-стари Отрязъци »
19 общо  XML / RSS