2015-12-14 179 views
-2

比方說,我有一個客戶和一個品牌類別(客戶有很多品牌和一個品牌屬於一個客戶)。當用戶在特定客戶的展示頁面上時,他/她可以選擇點擊按鈕以添加新品牌(該按鈕重定向到表單以創建新品牌,其中包含用戶應該指示的字段該品牌屬於哪個客戶)。但是,當用戶獲得該表單時,他/她不必手動指出該品牌屬於哪個客戶,而是應根據用戶正在查看其展示頁面的客戶的customer_id自動輸入信息。如果未查看任何顯示頁面,則父級customer_id的字段應該爲空(因爲它是默認設置),用戶應該手動輸入它。自動填充simple_form字段 - RAILS

有沒有辦法在Rails中實現這一點?如果是這樣,怎麼樣?

回答

1

你的問題有點難理解,但我們走吧。

首先,你必須創建一個鏈接到一個新的品牌,像:

<%= link_to 'New brand for #{@customer.name}", new_brand_path(customer_id: @customer.id) %> 

這樣,你正在過CUSTOMER_ID爲PARAM。

在對新動作的品牌控制器,你會做

def new 
    @customer = Customer.find_by_id(params[:customer_id])   
    @brand = @customer ? Brand.new(customer_id: @customer.id) : Brand.new 
end 

你看到我做了一個例子,說清楚做什麼。有更好的方法做,但我想這會引導你通過你想要的。

+2

這樣做的問題是,Customer.find將拋出一個錯誤,如果它不能找到具有該ID的記錄。一種更安全的方法是做@customer = Customer.find_by(id:params [:customer_id]) –

+0

有沒有一種方法可以隱藏表單中的字段,如果params [:customer_id]被傳遞,只顯示它if它不是? – MPorto

+0

是的。你做: <%除非@客戶做 f.input .... 結束%> – Guido

0

在從顯示頁面中的鏈接,你可以有這樣的事情

<%= link_to 'New Brand', new_brand_path(customer_id: params[:id]) %> 

然後在控制器,你可以有一些代碼,檢查,看是否CUSTOMER_ID是存在於params哈希表新動作:

@brand.customer = Customer.find(params[:customer_id]) if params[:customer_id] 

現在,當表單呈現時,假設使用form_for @brand,客戶字段將被設置。

如果他們從另一個頁面(除show以外)鏈接,那麼只是不要在link_to方法調用中傳遞customer_id:params [:id]。它將繞過控制器中的if語句並且客戶將變爲空白。

0
@new_brand = @customer.brands.new 

它填充在@new_brand cusomer_id與正確的值