2009-08-22 4 views
0

ため息...私はので、私はいくつかのモデルを持って言うことができます、このいずれかに大きな初心者のように感じる:created_by列とレールとの関連付けを作成しますか?

class Question < ActiveRecord::Base 
    has_many :answers 
    belongs_to :user 
end 

class Answer < ActiveRecord::Base 
    belongs_to :question 
    has_one :user 
end 

class User < ActiveRecord::Base 
    has_many :questions 
    has_many :answers, :through => :questions 
end 

ので、私の問題は、私が作成したユーザーを取得する方法がわからないということです質問または回答の質問(または回答が作成された)とき、ユーザは、決定すべきで作成され、ユーザーはここを参照してください(authlogicのユーザーモデルおよびコントローラから)現在のユーザーのセッションから来る必要があります:

class ApplicationController < ActionController::Base 

    helper_method :current_user_session, :current_user 

    ... 

    private 

    def current_user_session 
    return @current_user_session if defined?(@current_user_session) 
    @current_user_session = UserSession.find 
    end 

    def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.user 
    end 

end 

、current_userヘルパーメソッドは正常に動作しますが、どのユーザーが質問や回答を作成したのかを設定できますか?私の質問のスキーマにはcreated_byカラムがありますが、新しい質問を作成するとnullのままです。

+0

を作成します。 –

答えて

2

ビューを関連付ける他の方法(レール4 & 5)

belongs_to :created_by, class_name: "User", foreign_key: "created_by_id" 

場合:

コントローラで属性を設定する簡単な方法は、以下のようなブロックを使用することです1つのクラス(すなわち、「ユーザ」)に対する2つ以上の関連付けが必要である。

例: 私はUser(:email、:password)を作成し、profile(:name、:surname)に関連付けたいと考えています。しかし、私は自分の:電子メールで他のユーザーのプロフィールを作成する機能をユーザーに追加したいと思っています(さらにそれらに招待状を送ります)。

  1. ユーザー(has_oneのプロフィール)(ユーザー belongs_toの)プロフィールを作成します。この関連付けはのプロファイルテーブルにuser_id列を作成します。

    t.belongs_to :user, index: true, optional: true 
    

    だから協会は次のようになります:生成されたプロファイルテーブル移行ファイルで

  2. この行を追加します。

    "ユーザー1 - 1..0プロファイル"、関係の種類(プロファイルはそうかもしれません。user_id

  3. 関連付けm上に誘惑されたプロフィールモデル。

    belongs_to :created_by, class_name: "User", foreign_key: "created_by_id" 
    
  4. プロフィール#で@user.create_by = current_user.idを追加関連付けが動作していない、と列がnullのまま、なぜ私は確信して私はCREATED_BY列を使用したい実現ではなく、アクション

3

の列を呼び出すのではなく、user_idという列の名前を付けることをお勧めします。これらの名前を外部キーに使用すると、自動的に関連付けが「参照」されます。

@question = Question.new(params[:question]) do |q| 
q.user_id = current_user.id 
end 
@question.save 
+0

ああ、すごく、そうだね...これは、現在のユーザーのIDをそのフィールドに置きます。しかし、私はあなたの推薦に反して、created_byカラムを使用しました。 –

+0

これはもちろんダムと聞こえますが、私の見解ではユーザーにアクセスする方法がわかりません。 question.created_by.usernameは機能しません。 question.created_byは私にユーザーのIDを与えます。思考? –

+1

カラムcreated_byを呼び出す場合は、カラムの名前を指定する必要があります。デフォルトでは、それはuser_id(belongs_to:user、:foreign_key => "created_by")と呼ばれます。 (質問者。ユーザー名) – bdon

関連する問題