Ruby on rails 将参数传递给Rails中的新控制器操作
我想调用控制器的新操作来创建一个新对象,使用现有对象来设置默认值。到目前为止,我做了些什么来尝试:Ruby on rails 将参数传递给Rails中的新控制器操作,ruby-on-rails,Ruby On Rails,我想调用控制器的新操作来创建一个新对象,使用现有对象来设置默认值。到目前为止,我做了些什么来尝试: 链接到“新建”新建项目路径(t) 在Wice表格中,t是项的一个实例 生成的路由是/item/new.10,其中10是我要用作默认项的:id。我可以通过请求。引用者< /代码>,但是我想知道是否有更好的/更干净的方式来做这个? 如果你设置默认值在一个新的对象上,你应该考虑在迁移过程中在数据库级别设置默认值。为了保持系统的RESTful,您应该保持“new”操作url独立于从中获取默认值的对象,
链接到“新建”新建项目路径(t)
在Wice表格中,t
是项的一个实例
生成的路由是/item/new.10
,其中10是我要用作默认项的:id
。我可以通过<代码>请求。引用者< /代码>,但是我想知道是否有更好的/更干净的方式来做这个? 如果你设置默认值在一个新的对象上,你应该考虑在迁移过程中在数据库级别设置默认值。为了保持系统的RESTful,您应该保持“new”操作url独立于从中获取默认值的对象,即just/item/new
如果您想在不应用数据库级别的情况下从现有对象设置默认值,则应考虑在控制器操作中创建实例变量,并使用视图中的实例设置窗体元素中的默认值。另一个选项是在模型中的before_create回调中编辑对象,并在那里设置字段。改变你的路线来适应这个想法在我看来是不好的设计
将id作为参数传递给控制器:
link_to "New Item Path", new_item_path(:default_item_id => item.id)
在控制器中
@default_item = Item.find(params[:default_item_id])
请求。推荐人
?您应该能够通过params
不确定这是否是一个问题,但在“New”和路径规范之间应该有一个逗号
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
ItemsController
希望这能有所帮助因此,我想问题是如何获得我想用作传递给新操作的默认对象的id?它是每次都是同一个对象还是特定资源的唯一对象?您始终可以使用link_将_链接到“New”New_item_path(:default=>id),这将在params散列中传递对象的id,因此item/New?default=id是RESTful首选,您可以通过调用@object=object.find(params[:default])在控制器操作中获取默认对象。它是唯一的。新对象将是现有对象的派生对象(它将从中继承一些值),但它也将具有获取新值的字段。没有一个规范对象是它们都派生自的。我会使用上面注释中添加的方法。如果不想修改新的操作URL,请将id作为参数在链接中传递给帮助程序