我有一些显示一个类别的节目动作.但是从那里我想通过链接创建新产品.重点是我通过link_to传递了类别ID和名称. 它顺利,它打开产品/新动作.在浏览栏中有这样的链接http:// mysite / prod
它顺利,它打开产品/新动作.在浏览栏中有这样的链接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}}但根据您的需要,这可能有点过分.