我想調用控制器的新動作以使用現有控件的新動作來設置默認值。到目前爲止,我做了什麼來試試這個:將參數傳遞給Rails中的新控制器動作
link_to 'New' new_item_path(t)
在WICE網表,其中t
是item
一個實例。
生成的路線是/item/new.10
其中10是我想用作默認項目的:id
。我可以通過request.referrer
得知,但我想知道是否有更好/更清潔的方法來做到這一點?
我想調用控制器的新動作以使用現有控件的新動作來設置默認值。到目前爲止,我做了什麼來試試這個:將參數傳遞給Rails中的新控制器動作
link_to 'New' new_item_path(t)
在WICE網表,其中t
是item
一個實例。
生成的路線是/item/new.10
其中10是我想用作默認項目的:id
。我可以通過request.referrer
得知,但我想知道是否有更好/更清潔的方法來做到這一點?
如果您要在新對象上設置默認值,則應考慮在遷移內設置數據庫級別的默認值。爲了保持系統的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])
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
希望這有助於
所以,我想這個問題是如何得到我灣對象的ID噸作爲默認傳遞給新的行動? – dlu
每次都是相同的對象還是對特定資源唯一的對象?你總是可以使用link_to link_to'New'new_item_path(:default => id),它會傳遞params散列中對象的id,所以item/new?default = id,這是RESTful,首選,你可以抓住通過調用@object = Object.find(params [:default])控制器操作中的默認對象 –
它是唯一的。新對象將是現有對象的衍生物(它將從中繼承一些值),但它也會包含獲取新值的字段。沒有一個規範的對象,他們都來自。 – dlu