2017-10-12 13 views
0

空のフィールドで表示するためにネストされたフォームを取得しようとしています(現在のデータが表示されています)。この部分は修正されました。rails nested forms issue

また、それぞれのネストされたフォームエントリを1つずつ編集する方法を見つけようとしています。現在のところ、編集時に同じフォームにすべてのネストされたフォームエントリを表示するように編集することができます。理想的には、編集モードで開いているすべてのエントリではなく、1つのエントリだけを編集できる機能を備えた、各役職の横にリンクが必要です。

ユーザコントローラ

# renders the users/new.html.erb form 
def new 
    @user = User.new 
    @user.work_histories.build # used for nested attributes in forms 
end 


# renders the users/edit.html.erb view form 
def edit 
    @user = User.find(params[:id]) 
    @user.work_histories.build # used for nested forms 
end 

# white listed form attributes for user and also for nested attributes (work history, qualifications, etc...). 
def user_params 
    params.require(:user).permit(:first_name, :last_name, :email, :phone, :current_job_title, :password, :password_confirmation, 
        work_histories_attributes: [:user_id, :id, :job_title, :company, :description, :city, :state,:start_date, :end_date]) 
end 

ユーザモデル

 # allows for nested attributes in the user views. 
    accepts_nested_attributes_for :work_histories, allow_destroy: true, 
    reject_if: lambda {|attributes| attributes['job_title'].blank?} 

WorkHistoryモデル

belongs_to :user, optional: true 

ユーザのビューの表示。モーダルはfirst_nameのユーザーフィールドを表示しますが、作業履歴フィールドは表示しません。

<!-- modal --> 
<div class="modal fade" id="experienceModal" tabindex="-1" role="dialog" aria-labelledby="experienceModal" aria-hidden="true"> 
    <div class="modal-dialog"> 
    <div class="modal-content"> 

     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-times fa-fw" aria-hidden="true"></i></button> 
     <h4 class="modal-title" id="myModalLabel">Experience</h4> 
     </div> 

     <div class="modal-body"> 

     <!-- one-to-many nested attributes --> 
     <%= form_for(@user) do |f| %> 

      <%= f.label :first_name %> 
      <%= f.text_field :first_name, size: 40, autofocus: true, class: 'form-control' %> 

     <%= f.fields_for :work_histories do |ff| %> 

      <%= ff.label :job_title %> 
      <%= ff.text_field :job_title, size: 40, autofocus: true, class: 'form-control' %> 

     <% end %><!-- fields_for --> 

     <%= f.submit 'Save', class: 'btn btn-primary' %> 

     </div><!-- modal body --> 

     <div class="modal-footer"> 
      <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
     </div> 

     <% end %><!-- form_for --> 

    </div><!-- modal-content --> 
    </div><!-- modal dialog --> 
</div><!-- modal --> 

UPDATE:OK 私はので、私は、ユーザーが代わりに既存のユーザーデータと一緒に表示されている形式のデータで埋めることができ、空に表示するフォームを取得する方法を考え出しました。ビューにWorkHistory.newを追加するだけでした。

<%= form_for @user do |user_form| %> 

    <%= user_form.label :first_name %> 
    <%= user_form.text_field :first_name, autofocus: true, class: "form-control" %> 

    <%= user_form.fields_for :work_histories, WorkHistory.new do |wh_fields| %> 
     job: <%= wh_fields.text_field :job_title %> 
    <% end %> 

<% end %> 

答えて

0

これを更新すると、将来的に誰かが遭遇することがあります。空白のネストされたフォームを表示してユーザーがデータを入力できるようにするには、元の質問のUPDATEセクションを参照してください。

実際に既存のネストされたフォームレコードを編集するには、ユーザーIDと作業履歴IDの両方を渡す必要がありました。

<table> 
    <!-- one-to-many association to loop through a users qualifications --> 
    <% @user.work_histories.each do |w| %>   
<tr> 
    <td>   
    <h4><b><%= link_to w.job_title, edit_user_work_history_path(user_id: @user.id, id: w.id) %></b></h4> 
    <!--<h4><b><%= link_to w.job_title, edit_user_work_history_path(user_id: @user.id, id: w.id), data: {toggle: "modal", target: "#experienceModal"} %></b></h4>--> 
    </td> 
</tr> 
<tr> 
    <td> 
    <%= w.company %> 
    </td> 
</tr> 
<tr> 
    <td> 
    <%= w.start_date.strftime("%b %Y") %> - <%= w.end_date.strftime("%b %Y") %> 
    </td> 
</tr> 
<tr> 
    <td> 
    <%= w.city %>, <%= w.state %> 
    </td> 
</tr> 
<tr> 
    <td> 
    <br /> 
    <%= w.description %> 
    </td> 
</tr> 
<tr> 
    <td> 
    <br /> 
    <hr> 
    </td> 
</tr>  
<% end %>