【发布时间】:2021-03-29 21:36:14
【问题描述】:
使用 Rails 6 我正在设计一个管理警察罚款的应用程序。一个用户可以违反多篇文章,一篇文章可以有多个字母,一个字母可以有多个逗号。
这是我的实现:
#models/fine.rb
class Fine < ApplicationRecord
has_many :violations
has_many :articles, through: :violations
has_many :letters, through: :violations
has_many :commas, through: :violations
end
#models/article.rb
class Article < ApplicationRecord
has_many :letters
has_many :violations
has_many :fines, through: :violations
end
#models/letter.rb
class Letter < ApplicationRecord
belongs_to :article
has_many :commas
has_many :violations
has_many :fines, through: :violations
end
#models/comma.rb
class Comma < ApplicationRecord
belongs_to :letter
has_many :violations
has_many :fines, through: :violations
end
#models/violation.rb
class Violation < ApplicationRecord
belongs_to :fine
belongs_to :article
belongs_to :letter, optional: true
belongs_to :comma, optional: true
end
当我以 PDF 格式打印罚款时,我需要显示违规行为:文章、字母和逗号。我很难创建一个表格来编译罚款,因为它太深了。我正在使用 Active Admin,当我创建新的罚款时,我想关联许多违规行为。
违规示例:
Violation.new
=> #<Violation id: nil, article_id: nil, fine_id: nil, letter_id: nil, comma_id: nil, note: nil, created_at: nil, updated_at: nil>
如何创建一个表单(使用 Active Admin,它使用 Formtastic)将许多违规行为与罚款相关联?示例表格:
示例(带有示例数据):
Violation.new fine: fine, article: a, letter: a.letters.last, comma: a.letters.second.commas.last
=> #<Violation id: nil, article_id: 124, fine_id: 66, letter_id: 10, comma_id: 4, note: nil, created_at: nil, updated_at: nil>
【问题讨论】:
-
你能把它缩小到这个设置给你调试的特定问题吗?如果不真正了解整个应用程序和所有细节,很难告诉你这是否正确。
标签: ruby-on-rails database-design activeadmin formtastic