вы можете запустить команду rake, это все равно что запустить команду dos или shell из rails. Но, как я вижу, вы хотите запустить rake db: migrate, а затем выполнить какую-то другую задачу, и, согласно моему пониманию rails, вам нужно перезапуститьприложение после запуска таких задач rake, что может создать проблему, если вы запускаете команду rake для текущего запущенного приложения.
Для других вещей, например, копирования записей из одной модели в другую, вы можете иметь метод класса в Model(Модель фото в вашем случае) и может вызывать этот метод в действии контроллера, который вызывается из пользовательского интерфейса.Код может выглядеть как
photo Модель
class Photo < ActiveRecord::Base
def self.make_assets
Photo.all.each do |photo|
newasset = nil
newasset = Asset.create!(:user_id => photo.user_id,
:image => photo.image)
photo.destroy unless newasset.nil?
end
end
end
фотоконтроллер
def make_assets
Photo.make_assets
end
вид сбоку, у вас есть различные опции для вызова действия make_assets
1) link_to
<%= link_to "Make Assets",
url_for( :action => "make_assets", :controller=> :photos ),:remote=>true %>
2) button_to
<%= button_to "Make Assets",
url_for( :action => "make_assets", :controller=> :photos ),:remote=>true %>
3) form_tag
<% form_tag(:url => url_for(:action => "make_assets", :controller=> :photos),:remote => true) do -%>
<div><%= submit_tag 'Save' %></div>
<% end -%>