私は初心者なので、これが基本的なことであるとお詫びしますが、それは私を夢中にさせています。user.rbとquestion.rbという2つのRailsモデルがあります。ユーザーは複数の質問をすることができ、質問は1人のユーザーにのみ属することができます。認証には、Omniauth-Facebookを使用しています。モデルは次のとおりです。
user.rb
# == Schema Information
#
# Table name: users
#
# id :integer not null, primary key
# provider :string(255)
# uid :string(255)
# name :string(255)
# oauth_token :string(255)
# oauth_expires_at :datetime
# created_at :datetime not null
# updated_at :datetime not null
# email :string(255)
# fbprofileimage :text
#
class User < ActiveRecord::Base
attr_accessible :provider, :uid, :email, :fbprofileimage, :name
has_many :questions, :dependent => :destroy
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.email = auth.info.email
user.fbprofileimage = auth.info.image
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
end
question.rb
# == Schema Information
#
# Table name: questions
#
# id :integer not null, primary key
# headline :string(255)
# description :text
# user_id :integer
# budget :decimal(, )
# star :binary
# old_star :binary
# created_at :datetime not null
# updated_at :datetime not null
#
class Question < ActiveRecord::Base
attr_accessible :budget, :description, :headline, :star, :old_star, :user_id, :updated_at, :created_at
belongs_to :user
validates :headline, :description, :presence => true
end
ユーザーが質問を作成できるフォームがあります。フォームを送信するときに、user_id属性を割り当てて、フォームを作成したユーザーに質問を関連付けます。
current_userを定義するためのオブジェクトがアプリケーションコントローラーにあります(私はomniauthを使用しています):
class ApplicationController < ActionController::Base
protect_from_forgery
after_save :update
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
これを行うための最良の方法は何ですか?
私の環境:Rails 3.2.8、Ruby 1.9.3-p195、omniauth-facebookを使用していますが、Deviseは使用していません。