2011-11-16 35 views
0

我對RoR很新,所以這可能是非常基礎的。我的結構不斷深入,我無法弄清楚如何找到id。找到嵌套屬性的ID

首先你有一個公司可以有很多用戶。用戶登錄並進行身份驗證,並將current_user保存在具有會話的cookie中。

由於用戶有一家公司,我總是可以通過current_user找到Company.id。

下一個公司有很多農場。在農場中創建我可以從用戶cookie獲取公司ID,並且農場ID是新的,這樣可以工作,並且在農場顯示Rails知道它應該顯示哪個農場。所以這個級別的作品。

現在我想補充一個農場有很多塊。我正在通過關聯的Farm展示頁面添加Blocks,但Blocks_controller不知道它在哪個農場頁面上(據我所知,是否可以獲得任何信息)。

這裏是FarmsController創建工作:

def create 
    company_id = current_user.company_id 
    @company = Company.find(company_id) 
    @farm = @company.farms.build(params[:farm]) 
    if @farm.save 
     flash[:success] = "farm created" 
     redirect_to root_path 
    else 
     render 'pages/home' 
    end 
    end 

而這個代碼只是抱怨說,它不知道什麼ID我談論:

BlocksController

def create 
    @farm = Farm.find(params[:id]) 
    @block = @farm.blocks.build(params[:block]) 
end 

這顯示在相關的農場展示頁面,所以如果有一種方法來捕捉ID我很想知道它是什麼。

謝謝你的時間。

回答

1

得到那個ID的三個最簡單的方法是:

  1. 通在farm_id使用隱藏的表單字段。當創建鏈接到您的塊/新表單時,只需傳入farm_id即在塊控制器內使用new_blocks_path(:id => @farm.id)這樣的路徑,您將需要確保farm_id設置在Block模型中。

    def new 
        @block = new Block 
        @block.farm_id = params[:farm_id] 
    end 
    

    然後,如果你正在使用的形式爲farm_id場(這大概應該是隱藏型的),它應該包含正確的ID。現在,在「創建」塊方法來改變第一線

    @farm = Farm.find(params[:block][:farm_id]) 
    
  2. 您可以組合添加塊和使用嵌套形式農場的過程。看看http://railscasts.com/episodes/196-nested-model-form-part-1如何做到這一點。

  3. 您可以使用嵌套的RESTful資源來確保在塊控制器內您始終可以訪問農場ID。有關如何操作的更多信息這嘗試看看http://railscasts.com/episodes/139-nested-resources

+0

謝謝你,從形式傳遞ID的隱藏字段是大的一塊,我失蹤了。 –

+0

很高興聽到。如果它回答你的問題,可以隨意標記爲:) – Nick