gpt4 book ai didi

ruby-on-rails - 如何传递对象ID?

转载 作者:行者123 更新时间:2023-12-02 07:47:46 25 4
gpt4 key购买 nike

我有两个模型之间的关系

类别模型

class Category < ActiveRecord::Base
belongs_to :product
end

产品型号

class Product < ActiveRecord::Base
has_many :categories
end

我在产品表中有 category_id 但是当我在我的产品表中创建一个新产品时category_id 为空。我是 Rails 的新手,有人可以帮忙吗?

最佳答案

首先,一个想法 - 大多数时候,产品有很多类别,但每个类别也包含很多产品。也许您的关联应该是多对多的?关于您的实际问题。

如果我没理解错的话,你的问题实际上是关于如何在数据库中创建相互关联的类别和产品,即在构建新类别时如何设置 product_id 的值。

为了清楚起见,以备不时之需,product_id 仅为类别设置。毕竟,该类别属于该产品,因此它必须保存其所有者的 ID。

因此,假设您想要构建一个属于现有产品的新类别 - 您可以这样做:

# in your view, where you link from products/show.html.erb to category/new.html.erb
<%= link_to "Build new category for this product", new_category_url(:id => @product.id) %>
# you must have @product defined, and you also must have
# 'resources :categories' in your routes file

# in your controller action categories/new, set the new category's product id:
def new
@category = Category.new(:product_id => params[:id])
end

# include a hidden field to contain the product_id in your new form
<%= form_for @category do |f| %>
<%= f.hidden_field :product_id %>
... other fields, labels, etc.
<% end %>

# save the record as you normally would (analogous to the code in your comment to @Chowlett).
@category = Category.new(params[:category])
if @category.save
redirect_to :action => "list", :notice => "Category saved successfully."
else
render :action => "new"
end

上面的代码允许你构建一个产品,然后一个一个地构建每个类别。因此,我们首先构建您的产品,然后包含一个从产品/展示页面到您的类别/新表单的链接,传递您希望该类别所属的产品的 ID。

如果您想同时构建一个产品和一些类别,那就有点复杂了。有关这方面的更多信息,请查看 http://railscasts.com/episodes/196-nested-model-form-part-1 (这是一个由三部分组成的系列中的第一部分)和 https://github.com/ryanb/nested_form .除非您对上述基础知识非常熟悉,否则我不建议采取这种做法。我刚开始接触 Rails 时,曾在这段代码中沉思了一个星期!

关于ruby-on-rails - 如何传递对象ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5719499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com