0

私は初心者なので、これが基本的なことであるとお詫びしますが、それは私を夢中にさせています。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は使用していません。

4

1 に答える 1

0

これは、アプリケーションコントローラのメソッドであり、現在のユーザーを取得できれば幸いです。

def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
end

したがって、QuestionsControllerのnewメソッドまたはcreateメソッドのいずれかで使用して、次のようにユーザーを設定できます。

@question.user = current_user

それでうまくいくはずです。before_saveコールバックを使用することもできます。

于 2012-10-06T13:09:52.927 に答える