1

ハマった。次のモデルがあります:プロファイル、ユーザー、ジョブ。

ユーザーには 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`
4

2 に答える 2

7

真新しい のフィールドを含めたい場合は、コントローラーにいる間Jobに配列に追加しjobsます。

profile.jobs.build

newに渡すアクションでダミー レコードを作成することが多いのと同じように、 にもform_forダミー レコードを作成する必要がfields_forあります。

于 2013-03-12T01:36:39.487 に答える