has_many通过单选按钮

时间:2012-06-25 00:31:38

标签: ruby-on-rails has-many-through

努力获得一个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 %>&nbsp;
<% end %>

当我保存表单时 - 一切似乎都正常填充,但是当我切换到编辑模式时,不会检查与jobs_metadata中的值对应的单选按钮。

所以我认为我的问题是双重的:

  1. 我是否在上面正确定义了关系?我这样做是“The Rails Way”吗?
  2. 我是否正确定义了表单单选按钮 - 如果是这样,如何让他们在从DB读取时正确检查值?

1 个答案:

答案 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?) %>

我的例子可能不是你想要的,但你希望得到这个想法。

相关问题