【问题标题】:passing id parameter from show action to new action via link_to, rails通过 link_to、rails 将 id 参数从 show action 传递到 new action
【发布时间】:2013-03-16 07:41:17
【问题描述】:

我有一些显示一个类别的显示操作。但从那里我想通过链接创建新产品。重点是我通过 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。问题可能出在哪里? 也许代码在新动作下,实际上应该在创建动作下。大约一年前我设法做这样的事情,但我找不到那个项目。:(

【问题讨论】:

  • 哇,我自己找到了 :D 我必须使用@product.category_id = params[:id] 而不是`@product.category_id = @category.id`

标签: ruby-on-rails parameters link-to


【解决方案1】:

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

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

然后它们将在您的表单中显示。

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

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

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

如果您将参数结构化为::product =&gt; { :name =&gt; "whatever", :category_attributes =&gt; { :id =&gt; 1 } },但根据您的需要,这可能是矫枉过正。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-18
      • 2023-04-03
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2017-07-11
      相关资源
      最近更新 更多