3

我有一些显示一个类别的显示动作。但从那里我想通过链接创建新产品。重点是我通过 link_to 传递了类别 ID 和名称。

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

但是我怎样才能让这些 id 和 name 在表单中可用,我在哪里填写有关新产品的信息?在此之后,当我单击创建时,我希望这些值(例如 category_id)与其他关于产品的信息一起保存在数据库中。

在产品和类别之间,我已经建立了关系。

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

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

<%= 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。问题可能出在哪里?也许代码在新动作下,实际上应该在创建动作下。大约一年前我设法做这样的事情,但我找不到那个项目。:(

4

2 回答 2

5

您应该能够在您的new操作中设置值:

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

然后它们会以您的形式出现。

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

如果您让Product接受嵌套属性,Category那么我认为您可以简单地执行以下操作:

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

如果您将参数结构化为::product => { :name => "whatever", :category_attributes => { :id => 1 } }但这可能会根据您的需要而过大。

于 2013-03-26T13:37:24.793 回答
2

你有没有尝试过@product.category_id = params[:id]

通常?,url 中的任何内容都包含在params变量中。

于 2013-03-26T13:37:30.850 回答