は、私が購入、特定の日付属性を持って提供し、購入からイベントを作成し、rakeタスクを持っています。rakeタスクは、コントローラの「作成」メソッドを使用することはできますか?
rakeタスクのコードは次のとおりです。私は熊手を実行すると
namespace :events do
desc "Create events from purchases."
task purchases: :environment do
purchases = Purchase.all
purchases.each do |purchase|
begin
## SUMMARY VARIABLE
vendor = purchase.vendor.name
order_number = purchase.order_number
est_ship_date = purchase.estimated_ship_date
purchase_summary = "Est. ship date: #{est_ship_date} #{vendor} PO ##{order_number}"
## DESCRIPTION VARIABLE
tradegecko_url = purchase.tradegecko_url
description = "#{vendor} PO ##{order_number} Estimated ship date: #{est_ship_date}. #{tradegecko_url}"
## START_DATE VARIABLE
start_date = purchase.estimated_ship_date
##END_DATE VARIABLE
end_date = start_date
unless purchase.estimated_ship_date == nil
event = Event.find_or_initialize_by(summary: purchase_summary)
event.update_attributes(
summary: purchase_summary,
description: description,
start_date: start_date,
end_date: end_date
)
pp purchase
end
rescue NoMethodError => e
puts "#{e.inspect} #{purchase.inspect}"
end
end
end
、イベントは私が持っている私のイベントにコントローラが「作成」メソッドを除いて、正常に動作するようです私のイベントテーブルに作成されます私のGoogleカレンダーにイベントをプッシュ「@ event.save場合」コールは、その後、新たに作成されたGoogleカレンダーのイベントからEVENT_IDをつかみ、自分のデータベースに保存します。これは、私が手作業で新しいイベントを作成したが、新しいイベントがレーキから作成されたときには完全に機能しません。
events_controller.rb「作成」方法:
def create
@event = Event.new(event_params)
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event successfully created.' }
format.js {}
format.json { render json: @event, status: :created, location: @event }
else
format.html { render 'new' }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
if @event.save
gcal_event = Google::Apis::CalendarV3::Event.new({
summary: @event.summary,
description: @event.description,
start: {
date: @event.start_date
},
end: {
date: @event.end_date
}
})
@cal_service = GoogleCalendarService.new
@cal = @cal_service.calendar
result = @cal.insert_event(GoogleCalendarService::CALENDAR_ID, gcal_event)
@event.calendar_event_id = result.id
@event.save
else
render :nothing => true
end
end
ことを確認するためにどのような方法があることがコントローラのIは、rakeタスクを実行したときにメソッドが呼び出され、「作成」?
あなたがrakeタスクでGoogleカレンダーのロジックを追加することができます'event'オブジェクトです。 – Sravan
最良の方法は、バックafter_saveコールを使用して、モデルに 'Googleカレンダーのlogic'を移動することです。 – Sravan