Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将参数传递给Rails中的新控制器操作_Ruby On Rails - Fatal编程技术网

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作为参数在链接中传递给帮助程序