使用表单通过连接表更新has_many

时间:2016-03-13 11:11:14

标签: mysql ruby-on-rails

我缺乏rails项目的实施思路。在这一点上,似乎无法在rails中实现。

我正在使用rails框架将一种会计软件克隆到一个Web应用程序中,供小型制造公司在其不同的分支机构中跟踪他们的产品库存。

我有3种不同的型号:“产品”,“分支”& “的累加器

class Branch < ActiveRecord::Base
has_many :accumulators
has_many :products, :through => :accumulators

end

class Product < ActiveRecord::Base
has_many :accumulators
has_many :branches, :through => :accumulators

  def self.search(search)
   if search
    where('name LIKE ?', "%#{search}%")
  end
end

class Accumulator < ActiveRecord::Base
belongs_to :product
belongs_to :branch
end

我是rails的新手,在阅读了很多很多关联后,我发现使用集合将产品添加到分支“@ branch.products&lt;&lt; Product.all”

是否有可能在分支显示视图中使用表单“number_field_tag”将多个特定产品添加到连接表中?

例如 我想在分支显示视图中使用一个表单将一个名为“花园蛋”的10个(产品)添加到(分支)“分支”到(累加器)连接表中?

2 个答案:

答案 0 :(得分:1)

恭喜您选择:has_many, through:,您不会后悔。

productbranch之间的关系是静态的吗? 或者它改变了很多?

在您的Accumulator模型中,添加名为integer的{​​{1}}字段(计数可能存在冲突)。然后,您可以为amount创建表单,也可以添加嵌套表单,例如Cocoon

通过这种方式,您可以Accumulators添加Accumulators BranchProduct和某个amount

非主题:

这是一篇关于has_many through为什么有一些优点的文章: http://blog.flatironschool.com/why-you-dont-need-has-and-belongs-to-many/

如果您遇到表单问题我真的可以推荐SimpleForm,对于很好的Javascript辅助字段,我建议使用Select2

答案 1 :(得分:0)

如果表格accumulators只需要保存两件事:product_idbranch_id,您就可以轻松使用has_and_belongs_to_many个关联。

class Branch < ActiveRecord::Base
  has_and_belongs_to_many :products, join_table: 'accumulators'
end

class Product < ActiveRecord::Base
  has_and_belongs_to_many :branches, join_table: 'accumulators'
end

现在,没有必要使用第三种模式。

就目前而言,如何添加关系,在这种情况下很容易:

branch = Branch.last
branch.products << Product.create # you don't need to touch the middle table.

您可以使用像jQuery Chosen Plugin这样的东西,而不是使用number_field_tag来请求普通ID。这个插件允许你使用像输入这样的标签,并将id发送到由,分隔的服务器。