2011-10-21 102 views
0

假設我有這樣的聯想:創建新的對象

class User < ActiveRecord :: Base 
    has_one :car 
end 
class Car < ActiveRecord :: Base 
    belongs_to :user 
end 

路線:

resources :users do 
    resources :cars 
end 

那麼會是什麼代碼,在「新」的操作方法在CarsController中

class CarsController < ApplicationController 

    def new 
    #??? what's necessary to be put here, 
    # if I have request 'localhost:3000/users/1/cars/new' 
    end 
    ... 
end 

Will Rails會自動計算出所有東西,所以我不必在第é'新'方法?另外,由於'新'動作會產生一個'form_for(@car)'表單助手,我該如何創建這個車對象

這是正確的嗎?

class CarsController < ApplicationController 
    def new 
    @user = User.find(params[:user_id]) 
    @car = @user.build_car({}) 
    end 
end 

回答

0

這看起來很好。導軌將而不是自動做任何。如果你喜歡的話,那裏有許多可以實現自動化的寶石,但陪審團不在乎他們是否真的值得你花時間。

如果你沒有參數傳遞給汽車,順便說一句,你可以運行@user.build_car沒有參數。您還需要在form_for幫手中專門說明您將汽車嵌套在用戶下方:form_for [@user, @car]否則表單的目標將是/cars而不是/user/1/cars

0

你很親密,狒狒。
我實際上做的:

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    @car = @user.cars.build 
    end 
end 

但是,如果你不想在創建的同時,用戶的汽車,請嘗試:

class CarsController < ApplicationController 
    def new 
    @user = User.find(params[:user_id]) 
    @car = @user.cars.build 
    end 
end 

我發現這樣做時,nested_form railscast非常有幫助這種事情。事實上,我認爲你可能會從中獲得很多(並使用nested_form gem)。

railscasts_196-nested-model-form-part-1