has_many :through 関係をラジオ ボタンで表される関係を持つフォームで適切に機能させるのに苦労しています。
この関係は、関連付けられたさまざまなメタデータを持つことができるジョブを記述し、それらのメタデータは異なるタイプにすることができます。このモデルの背後にある考え方は、最終的には、新しいテーブルなどを追加することなく、何らかの種類または値のカテゴリなど、他のタイプのジョブに他のメタデータを追加できるようになるということです。
この例では、仕事を送信するためのフォームがあり、フィールドの 1 つが仕事の種類 (フルタイム、パートタイム、コンサルティング、フリーランス) であり、4 つのラジオ ボタンで表されます。
したがって、DB に保存すると、対応するテーブルに次のようになります。
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 (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 の値に対応するラジオ ボタンがチェックされません。
だから私は私の質問が2つあると思いました:
- 上記で関係を正しく定義しましたか? 私はこれを「The Rails Way」でやっていますか?
- フォームのラジオ ボタンを正しく定義していますか?もしそうなら、DB から読み取るときに値を適切にチェックするにはどうすればよいですか?