努力获得一个has_many:通过关系与具有单选按钮所代表关系的表单正常工作。
该关系描述了一个可以具有与之关联的各种元数据的作业,并且这些元数据可以是不同类型的。这个模型背后的想法是,我最终能够将其他元数据添加到其他类型的作业中,例如某种类别或价值的类别,而无需添加新表等。
在这个例子中,我有一个表单来提交作业,其中一个字段是由四个单选按钮代表的作业类型(全职,兼职,咨询,自由职业者)。
因此,当您在相应的表格中保存数据库时:
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
Metadatum(元数据的单数)模型
class Metadatum < ActiveRecord::Base
has_one :metadata_type
has_many :jobs_metadata
has_many :jobs, :through => :jobs_metadata
JobMetadatum模型&lt; - 我可以在此表中添加其他字段,因此:通过
class JobsMetadatum < ActiveRecord::Base
belongs_to :job
belongs_to :metadatum
元数据类型模型&lt; - 示例中不需要,但为了完整性而包含
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中的值对应的单选按钮。
所以我认为我的问题是双重的:
答案 0 :(得分:1)
尝试在调用radio_button_tag时指定第三个选项以使其选中:
<%= radio_button_tag("job[metadatum_ids]", job_type.id, true) %>
请点击此处了解详情:http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-radio_button_tag
显然你希望它基于测试是真的,所以你可以在你的工作对象上定义方法,如
def full_time?
self.metadata.include?(Metadata.find(1))
end
然后:
<%= radio_button_tag("job[metadatum_ids]", job_type.id, job.full_time?) %>
我的例子可能不是你想要的,但你希望得到这个想法。