2013-03-28 56 views
1

我讀過一堆與此相關的帖子,但仍未爲我點擊。我有一個例子,我試圖儘可能保持簡單,以便我能夠理解外鍵的分配方式。Rails關聯:創建特定於客戶的訂單

假設我們有2種型號...

user.rb

Class User < ActiveRecord::Base 
    has_many :microposts 
end 

micropost.rb

Class Micropost < ActiveRecord::Base 
    belongs_to :user 
end 


我發現另一篇文章的microposts_controller一些代碼...

def create 
    @micropost = current_user.microposts.build(params[:micropost]) 
    if @micropost.save 
    ... 
    else 
    ... 
    end 
end 

問題

  • 是 'CURRENT_USER' 一軌方法?
  • 如果該模型被稱爲Customer,'current_customer'是否有效?
  • 應用程序如何知道哪個用戶正在創建微博? (這可能是一個愚蠢的方式來提出問題)

回答

0

current_user通常由像Devise這樣的認證框架提供。它可以通過查看登錄時創建的會話來確定用戶。是的,如果至少使用Devise創建了一個名爲Customer的模型,則current_customer將在「客戶」登錄後生效。

0

回答

  1. 沒有current_user不是Rails的方法。它由一些認證框架提供,大多數應用程序實現一個幫助器方法,該方法返回通常在會話或實例變量上設置的當前用戶。

  2. 不,因爲方法沒有被模型定義。 current_customer不起作用。有一些方法可以做一個動態方法,如果給出一個帶有其他名字的模型,比如Customer,你可以寫一個method_missing來給出所需的輸出,但是這對於它的使用可能會有更多的工作。

  3. 返回問題1的方法current_user將返回User實例這是目前在那麼結果會是這樣簽署類似@current_user.microposts.build

用戶的CURRENT_USER的代碼通常會看起來像

def current_user 
    @current_user ||= User.find_by_remember_token(cookies[:remember_token]) 
end 

這幾乎說查找以前存儲在cookie中有remember_token用戶或使用@current_user如果已經設置。

希望這會有所幫助!

相關問題