Особенности check_box_tag
<%= check_box_tag 'check_for[]', c.id %> <%= check_box_tag 'check_for', c.id %>
Обе строчки рабочие, но в певом случае мы получим следующие параметры:
Parameters: {"check_for"=>["8", "10", "27"], "commit"=>"Submit", "authenticity_token"=>"P6V5lacVnxwPidemELGPse9LGvMrqWOh2BaLdLQ/YG0=", "utf8"=>"✓"} Parameters: {"check_for"=>["27"], "commit"=>"Submit", "authenticity_token"=>"P6V5lacVnxwPidemELGPse9LGvMrqWOh2BaLdLQ/YG0=", "utf8"=>"✓"}
А во втором при тех же исходных:
TinyMCE + papperclip + jrails(jquery) »
UPD: ну очень сырой плагин
Простая сортировка списков в rails
Допустим, в качестве примера, у нас есть некоторый список который мы хотим сортировать с минимальными действиями со стороны пользователя.
Стоит заметить, что этом примере я использую модель Page со следующими полями:id(int), name(string), pos(int)
Итак, после генерации список должен выглядеть так:
<ul id=”sortlist”>
<li id=”item_1>Первый, пошел</li>
<li id=”item_2>Второй, пошел</li>
<li id=”item_3>Третий, пошел</li>
<li id=”item_4>Четвертый, пошел</li>
<li id=”item_5>Пятый, пошел</li>
</ul>
Еще один момент заключается в id тега li, как можно заметить он состоит и двух частей это item и какое то число. Число - это id из выше упомянутой таблицы. Зачем это нужно будет понятно ниже.
Следующий этап, сделать возможным перетаскивание пунктов внутри списка. Славься RJS, делается это одной строкой, а именно так:
<%= sortable_element “sortlist”, :url => { :action => ‘update_sorted_list’ } %>
sortable_element, во-первых - позволит двигать список с id = “sortlist”, во-вторых - при перемещении любого из элементов списка(бросании) отправит запрос XMLHttpRequest методу update_sorted_list. В этом случае это будет массив значений id тега li(точнее того что идет после знака _ ) в том порядке в каком они будут отсортированы. Пример для наглядности: предположим мы решили, что пятый пойдет вторым и переместили его туда, тогда запрос будет таким [1,5,2,3,4]
Доступ в контроллере мы можем получить через params[:sortlist]. Как же нам сохранить результат? Все просто, так как нам передаются id записей в таблице, нам всего лишь нужно сопоставить их с индексами в передаваемом массиве и эти индексы внести в таблицу в колонку pos. Как это выглядит в коде контроллера:
def update_sorted_list
params[:sortlist].each_with_index do |id, p|
Page.update(id, :pos => p)
end
render :nothing => true
end
Все, теперь все должно работать. Куда интереснее организация деревьев, но об этом потом как-нибудь.
P.S.
Чтобы список после перезагрузки выводился в правильном порядке он должен быть отсортирован по колонке pos это будет выглядеть как-то так
def index
@items=Page.find(:all, :order => “pos”)
…..
end
Rails ajax таблицы »
Не читал, но советуют.
Изображение и текст в ссылке
Иногда нужно сгененрировать подобную ссылку:
<a href=”/controller/action/1”> <img src=”/images/img.png”> text </a>
Для себя эту задачу в rails я решаю так:
<link_to “#{image_tag(“/images/img.png”)} text”, @pages>
Apache + RubyOnRails
Для работы связки Rails + Apache я использовал passenger. При установке на CentOS5 был приятно удивлен инсталятором, который проверил не хватающие зависимости и вывел команды с помощью которых их можно установить(мелочь, а приятно). В конце установки он подробно написал, как нужно изменить конфиг apache. В целом установка passenger проста и подробно расписана на modrails.com. Если после установки возникают проблемы с запуском приложения рекомендую проверить следующие вещи:
- установлена поддержка баз данных которые вы используете
- произведена миграция для production, rake db:migrate RAILS_ENV=”production”.
- Apache был перезапущен после всех манипуляций
CentOS5 + RubyOnRails
Вот так просто и не навязчиво))
sudo yum install ruby
sudo yum install ruby-devel
sudo yum install rdoc
wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz
tar xfvz rubygems-0.9.4.tgz
cd rubygems-0.9.4
sudo ruby setup.rb
sudo gem install rails
sudo gem install mongrel
при установке sqlite3 не забудьте поставить sqlite-devel(в разных ос называется по разному)
sudo yum install sqlite-devel
sudo gem install sqlite3-ruby
Корректное отображение кодировки ROR + MySQL
Весь фокус в создании баз и задании кодировки по пумолчанию:
CREATE DATABASE `myproject_development` /*!40100 DEFAULT CHARACTER SET utf8 */;
CREATE DATABASE `myproject_production` /*!40100 DEFAULT CHARACTER SET utf8 */;
CREATE DATABASE `myproject_test` /*!40100 DEFAULT CHARACTER SET utf8 */;
Проблема mysql и rails 2.2.2
решение:
sudo env ARCHFLAGS=”-arch i386” gem install mysql — —with-mysql-dir=/usr/local/mysql —with-mysql-lib=/usr/local/mysql/lib —with-mysql-include=/usr/local/mysql/include -V
Subversion и RubyOnRails
При изучении рельсов когда-нить обязательно наступает момент когда нужно разработку вести с помощью subversion. Причин этому может быть несколько, остановимся на том, что Вы всетаки решили его установить.
Установка в зависимости от платформы может быть разная и она довольно подробно описывается на тигрисе. Но, что делать дальше???
Шаг первый: создания хранилища
Делается это из под рута командой
svnadmin create name
Шаг второй: импорт уже разрабатываемого проекта
svn import existproject file:///name/project -m “Initial import”
Шаг третий: создание рабочей копии
svn checkout file:///name/project
Готово!
Завтра распишу подробнее…