ハマった。次のモデルがあります:プロファイル、ユーザー、ジョブ。
ユーザーには 1 つのプロファイルがあり、プロファイルには多くのジョブがあります。
class Profile < ActiveRecord::Base
belongs_to :user
has_many :jobs
attr_accessible :user_id, :first_name, :last_name, :headline,:jobs_attributes
accepts_nested_attributes_for :jobs, allow_destroy: true
end
class User < ActiveRecord::Base
has_one :profile
attr_accessible :username,:email, :password,:profile_attributes
accepts_nested_attributes_for :profile, allow_destroy: true
end
class Job < ActiveRecord::Base
belongs_to :profile
belongs_to :country
attr_accessible :company, :country_id, :end_date, :job_title, :profile_id, :start_date
end
ここで、ユーザーが自分のプロファイルを編集して自分のプロファイルにジョブを追加できるようにしたいと考えています。これを行うには、次のコードを使用しました。
<%= f.fields_for :jobs do |j| %>
<%= j.label :job_title, "Job Title" %>
<%= j.text_field :job_title %>
<%= j.label :company, "Company" %>
<%= j.text_field :company %>
............................
<% end %>
しかし、問題は、ユーザーが自分のプロファイルに既に仕事を持っている場合にのみフィールドを表示し、それを更新できることです。ただし、この場合、配列は空であり、反復はありません。ユーザーが仕事をしていなくてもフォームが確実に表示されるようにするには、これの代わりに何を使用できますか?
「begin - end while」を追加しようとしましたが、機能しませんでした。:jobs 配列が空であるかどうかのチェックも、新しい Job オブジェクトの作成も機能しませんでした...または少なくとも私の試み。
あなたはなにか考えはありますか?
ありがとう!
コントローラーの新しいメソッド。
def new
resource = build_resource({})
profile = resource.build_profile
profile.jobs += [profile.jobs.build]
respond_with resource
end`