2009-08-22 39 views
0

唉...我覺得在這一個大的新手,所以可以說我有幾個型號:創建一個created_by列並與rails關聯?

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輔助方法工作正常,但我怎樣才能設置用戶創建問題或答案?像ID喜歡只說@ question.user

順便說一句,我對我的問題的模式有CREATED_BY列,但是當我創建一個新的問題,它保持空。

+0

我意識到我想用CREATED_BY列,但不知道爲什麼聯想不能正常工作,並且列保持空。 – 2009-08-22 05:06:57

回答

2

的另一種方法的視圖相關聯(軌道4 & 5)

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

如果需要兩個或多個關聯到一個類(即「用戶」)。

例子: 我想創建用戶(:電子郵件:密碼),並將其與個人資料相關聯(:名稱,:姓)。但是,我想添加用戶使用他們的電子郵件創建其他用戶個人資料的能力(並進一步向他們發送邀請)。

  1. 創建資料(belongs_to的用戶)和用戶(HAS_ONE 資料)。該協會在型材表中創建user_id列。

  2. 在生成概況表遷移文件添加此行:

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

    所以關聯變得:

    「用戶1 - 1..0配置文件」,一種關係(所以配置文件可能,並且可能不具有USER_ID

  3. 加入聯想米在頂部entioned到檔案模型。

    belongs_to :created_by, class_name: "User", foreign_key: "created_by_id" 
    
  4. 添加@user.create_by = current_user.id在檔案#創建行動

3

,而不是調用列created_by,優選的方式是命名列user_id。對這些外鍵使用這些名稱將讓rails自動「查看」關聯。

一種簡單的方式來設置在控制器的一個屬性是使用塊作爲這樣:

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

啊,真棒,所以我看到...這將當前用戶的ID放在該字段中。不過,我確實違背了你的建議,並使用了created_by專欄。 – 2009-08-22 07:17:13

+0

所以當然這聽起來很愚蠢......但在我看來,我不知道如何訪問用戶? question.created_by.username不起作用。但是question.created_by給了我用戶的id。想法? – 2009-08-22 07:24:10

+1

如果你要調用列CREATED_BY,你需要自行指定列的名稱,因爲它會默認假定這就是所謂的user_id(belongs_to的:用戶:foreign_key =>「CREATED_BY」),那麼你可以訪問相關聯的用戶:(question.user.username) – bdon 2009-08-22 07:30:03

相關問題