【发布时间】:2012-01-12 11:27:03
【问题描述】:
我有我想一定是常见的情况,但可能无法找到解决问题的方法......
我的应用程序中有几个链接模型:
class Product < ActiveRecord::Base
validates_uniqueness_of :prod_code
end
class Stock < ActiveRecord::Base
belongs_to :product
end
其实还有很多其他的模型也属于Product。默认情况下,在库存记录上,我只看到 product_id 字段,这是一个自动递增的数字,对用户没有多大帮助。产品有一个唯一的prod_code,它位于条形码等处,是产品数据库的自然键。
我希望股票和其他链接模型的创建/编辑屏幕显示 prod_code 的文本字段,并能够以合理的方式响应 stock[prod_code] 形式的参数(例如查找 prod_code,并根据结果设置 prod_id),并且自动(例如 Stock.new(params[:stock]) 应该可以工作。
为了澄清,设置 stock[prod_code] 不会改变产品数据库中的任何内容;相反,它会更改相关库存记录的 product_id,即将库存记录链接到不同的产品记录。
目前,我已经在 stock 模型中定义了各种方法,例如 prod_code= 来实现这项工作。但正如我所提到的,实际上有多个模型可以参考我的产品表。有什么方法可以在 Product 模型中定义一些东西吗?
例如类似于 referenced_by 方法,它会告诉所有链接模型通过在 products 表中查找来处理 prod_code 参数?
class Product < ActiveRecord::Base
validates_uniqueness_of :prod_code
referenced_by :prod_code
end
【问题讨论】:
-
我不确定您如何处理嵌套的产品代码;它以文本字段的形式显示在表单中 - 这是否意味着它是手动输入的?无论如何,我认为accepts_nested_attributes 是您正在寻找的,尽管我认为您必须建立从Stock 到Product api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/… 的has_one 关系
-
在我看来嵌套属性是用于例如从库存屏幕编辑产品代码数据库。这不是我想做的——我只是想让用户在库存编辑屏幕上输入新的产品代码。
-
我的想法是我可以进入脚手架视图,例如在 _form.html.erb 中,将 :product_id 更改为 :prod_code,一切正常。编辑屏幕会显示当前的产品代码,用户可以输入一个新的。
-
回答第二条评论 - 这就是我的想象,但我不太明白。库存属于产品,您希望能够分配或更新哪个产品,在我看来,您可能最好将选择列表作为表单的一部分,其中向用户显示产品名称但表单提交Stock 的 product_id 字段。我想令人困惑的是 prod_code 是什么?
-
对不起,prod_code 只是识别产品的唯一代码(它在所有库存单位的条形码中,因此用户只需扫描即可)。在某些情况下,下拉菜单确实很有意义——这正是我处理质量代码等的方式,但是有 200,000 种产品。我不想让客户端从友好名称映射到 id,而是在服务器上进行。
标签: ruby-on-rails ruby activemodel