Daniel Kehoe のLearn Ruby on Railsの本に取り組んでいるときに、スプレッドシート接続のセクションにたどり着きました。Google ドライブの回避策を実行したところ、フラッシュ通知が送信されたというメッセージが表示されましたが、Google ドライブを確認すると、作成されたファイルが表示されません。
Learn-Rails-例
スプレッドシート。これは私の models/contact.rb ファイルです。
require 'google_drive_v0' class Contact include ActiveModel::Model attr_accessor :name, :string attr_accessor :email, :string attr_accessor :content, :string validates_presence_of :name validates_presence_of :email validates_presence_of :content validates_format_of :email, :with => /\A[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}\z/i validates_length_of :content, :maximum => 500 def update_spreadsheet connection = GoogleDriveV0.login(Rails.application.secrets.email_provider_username, Rails.application.secrets.email_provider_password) ss = connection.spreadsheet_by_title('Learn-Rails-Example') if ss.nil? ss = connection.create_spreadsheet('Learn-Rails-Example') end ws = ss.worksheets[0] last_row = 1 + ws.num_rows ws[last_row, 1] = Time.new ws[last_row, 2] = self.name ws[last_row, 3] = self.email ws[last_row, 4] = self.content ws.save end end
これは、「連絡先」からのメッセージが私の電子メールに送信されるべきであることを示すcontacts_controller.rbです。
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(secure_params)
if @contact.valid?
@contact.update_spreadsheet
UserMailer.contact_email(@contact).deliver
flash[:notice] = "Message sent from #{@contact.name}."
redirect_to root_path
else
render :new
end
end
private
def secure_params
params.require(:contact).permit(:name, :email, :content)
end
end
サーバーをロードしてから連絡先フォームを送信しようとすると、
の認証に失敗しました: 投稿の応答コード 403 https://www.google.com/accounts/ClientLogin : Error=BadAuthentication
そして、これはターミナルで:
WARNING: GoogleDriveV0.login is deprecated and will be removed in the next version. Use GoogleDriveV0.login_with_oauth instead. Completed 500 Internal Server Error in 153ms
google_drive (1.0.0) lib/google_drive_v0/session.rb:109:in `rescue in login'
google_drive (1.0.0) lib/google_drive_v0/session.rb:102:in `login'
google_drive (1.0.0) lib/google_drive_v0/session.rb:43:in `login'
google_drive (1.0.0) lib/google_drive_v0.rb:19:in `login'
...learn-rails/app/models/contact.rb:15:in `update_spreadsheet'
...learn-rails/app/controllers/contacts_controller.rb:10:in `create'