我想调用控制器的新操作来使用现有对象创建新对象来设置默认值。到目前为止,我尝试过这样做:
item
在Wice网格表中,/item/new.10
是:id
的实例。
生成的路线是request.referrer
,其中10是我想要用作默认项目的{{1}}。我可以通过{{1}}了解它,但我想知道是否有更好/更清洁的方法来做到这一点?
答案 0 :(得分:4)
如果要在新对象上设置默认值,则应考虑在迁移期间在数据库级别设置这些默认值。为了使您的系统保持RESTful,您应该保持“新”操作URL独立于您正在获取默认值的对象,即/ item / new。
如果要在不应用数据库级别的情况下设置现有对象的默认值,则应考虑在控制器操作中创建实例变量,并在视图中使用该变量在表单元素中设置默认值。另一种选择是在模型中的before_create回调中编辑对象并在那里设置字段。改变你的路线以适应这个想法将是糟糕的设计IMO。
将id作为参数传递给控制器:
link_to "New Item Path", new_item_path(:default_item_id => item.id)
控制器中的
@default_item = Item.find(params[:default_item_id])
答案 1 :(得分:1)
request.referrer
?您应该能够通过params
不确定是否存在问题,但“新建”和路径规范之间应该有逗号
link_to 'New', new_item_path(t)
然后在控制器中你可以设置强大的参数,如果你想彻底
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
希望这有帮助