当前位置 : 主页 > 编程语言 > ruby >

ruby-on-rails – 通过link_to,rails将show参数从show action传递给new action

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有一些显示一个类别的节目动作.但是从那里我想通过链接创建新产品.重点是我通过link_to传递了类别ID和名称. 它顺利,它打开产品/新动作.在浏览栏中有这样的链接http:// mysite / prod
我有一些显示一个类别的节目动作.但是从那里我想通过链接创建新产品.重点是我通过link_to传递了类别ID和名称.

它顺利,它打开产品/新动作.在浏览栏中有这样的链接http:// mysite / products / new?id = 43& name = Skeleji.没关系.

但是,我如何在表格中提供这些ID和名称,我在哪里填写有关新产品的信息?
在此之后,当我点击创建时,我希望theese值这样的category_id与其他信息abaut产品一起保存在db中.

之间,产品和类别我建立了关系.

到目前为止我的代码看起来像这样.

我的类别/显示操作代码如下所示.

<%= link_to "Add Product", {:controller => "products", :action => "new", :id => @category.id, :name => @category.name }%>

产品控制器,新动作看起来像这样.

def new
@product = Product.new
@product.category_id = @category.id
end

单击创建它会创建项目,但不包含category_id.哪里可能是问题?
也许代码什么是新行动,实际上应该是在创建行动.大约一年前,我设法做了这样的事情,但我找不到那个项目.:(

您应该只需在新操作中设置值:

def new
  @product = Product.new
  @product.category_id = params[:id]
  @product.name = params[:name]
end

然后它们将以您的形式出现.

但我认为调用参数id并不是一个好主意,因为它是资源路由的默认参数名称. ProductsController中的params [:id]通常应该始终引用Product对象.碰巧,你正在新的动作中使用它,在正常使用中永远不会收到一个id参数,所以我怀疑你会遇到任何麻烦,但它不是很语义.

如果你让Product接受Category的嵌套属性,那么我认为你可以简单地做:

@product = Product.new(params[:product])

如果你构建你的params,如:: product => {:name => “whatever”,:category_attributes => {:id => 1}}但根据您的需要,这可能有点过分.

网友评论