努力获得 has_many :through 关系与具有由单选按钮表示的关系的表单正常工作。
该关系描述了一个作业,该作业可以具有与之关联的各种元数据,并且这些元数据可以是不同的类型。这个模型背后的想法是,我最终将能够将其他元数据添加到其他类型的作业中,例如某种类别或价值的类别,而无需添加新表等。
在这种情况下,我有一个提交工作的表单,其中一个字段是工作类型(全职、兼职、咨询、自由职业),由四个单选按钮表示。
因此,当您保存在数据库中时,您将拥有相应的表:
jobs
id - 1
title - "Rails Developer"
jobs_metadata
job_id - 1
metadata_id - 1
metadata
id - 1
description - "Full Time"
metadatum_type_id - 1
metadatum_types
id - 1
description - "Job Type"
以下是我的模型的摘要:
工作模式
class Job < ActiveRecord::Base
has_many :jobs_metadata
has_many :metadata, :through => :jobs_metadata
元数据(元数据的单数)模型
class Metadatum < ActiveRecord::Base
has_one :metadata_type
has_many :jobs_metadata
has_many :jobs, :through => :jobs_metadata
JobMetadatum 模型<-- 我可能会在此表中添加其他字段,因此 :through
class JobsMetadatum < ActiveRecord::Base
belongs_to :job
belongs_to :metadatum
MetadataType 模型<-- 示例中不需要,但为了完整性而包含在内
class MetadataType < ActiveRecord::Base
has_many :metadata
这是表示作业视图中单选按钮的代码
查看代码
<% @job_types.each do |job_type| %>
<%= radio_button_tag("job[metadatum_ids]", job_type.id) %>
<%= job_type.description %>
<% end %>
当我保存表单时 - 一切似乎都正确填充,但是当我切换到编辑模式时,未选中对应于 jobs_metadata 值的单选按钮。
所以我想我的问题是双重的:
- 我是否在上面正确定义了关系?我在做这种“Rails 方式”吗?
- 我是否正确定义了表单单选按钮 - 如果是这样,我如何让它们在从数据库读取时正确检查值?