2016-02-26 154 views
1

我想調用控制器的新動作以使用現有控件的新動作來設置默認值。到目前爲止,我做了什麼來試試這個:將參數傳遞給Rails中的新控制器動作

link_to 'New' new_item_path(t)

在WICE網表,其中titem一個實例。

生成的路線是/item/new.10其中10是我想用作默認項目的:id。我可以通過request.referrer得知,但我想知道是否有更好/更清潔的方法來做到這一點?

回答

3

如果您要在新對象上設置默認值,則應考慮在遷移內設置數據庫級別的默認值。爲了保持系統的RESTful,你應該保持'new'動作url獨立於你正在抓取默認值的對象,即/ item/new。

如果您希望從現有對象中設置默認值而不應用於數據庫級別,則應考慮在控制器操作中創建實例變量,並在視圖中使用該實例變量在表單元素中設置默認值。另一種選擇是在模型中的before_create回調中編輯對象並在其中設置字段。改變你的路線以適應這個想法將是不好的設計IMO。

傳遞ID,以您的控制器設置了一個param:

link_to "New Item Path", new_item_path(:default_item_id => item.id) 

在控制器

@default_item = Item.find(params[:default_item_id]) 
+0

所以,我想這個問題是如何得到我灣對象的ID噸作爲默認傳遞給新的行動? – dlu

+0

每次都是相同的對象還是對特定資源唯一的對象?你總是可以使用link_to link_to'New'new_item_path(:default => id),它會傳遞params散列中對象的id,所以item/new?default = id,這是RESTful,首選,你可以抓住通過調用@object = Object.find(params [:default])控制器操作中的默認對象 –

+0

它是唯一的。新對象將是現有對象的衍生物(它將從中繼承一些值),但它也會包含獲取新值的字段。沒有一個規範的對象,他們都來自。 – dlu

1

request.referrer?你應該能夠在ID在您完成params

不知道控制器如果這是一個問題,但還是應該有「新」和路徑規範之間的逗號

link_to 'New', new_item_path(t) 

然後在控制器你可以設置強有力的PARAMS如果你想徹底

ItemsController < ApplicationController 
    def new 
    # new action 
    end 

    def create 
    item = Item.new(item_params) 

    if item.save 
     flash[:notice] = 'Successfully created your item.' 
     redirect_to item #if there's an item#show page 
    else 
     flash[:alert] = 'Error: item not created.' 
     render :new 
    end 
    end 

    private 

    def item_params 
    params.require(:item).permit(:attribute_1, :attribute_2, ...) 
    end 
end 

希望這有助於

相關問題