2017-02-10 11 views
0

私は、レール上のルビーにネストされたフォームを構築しています。has_oneネストされた関連付けは、編集ルートの外部キーを無効にします。

入れ子になったの関連付けが正常に機能します。ただし、編集ページを読み込むと、ネストされた関連付けの外部キーcompany_idが無効になります。

私はupdate_only: trueaccepts_nested_attributes_forに入れて試しています。idは強いパーマネントで、stackoverflowの他の同様の回答の質問に示唆されていますが、何も私にとってはうまくいきません。

実際にネストされた関連付けが更新され、その外部キー自体を無効にする原因は何ですか?私のコードは以下の通りです。ありがとう!

# company.rb 
class Company < ApplicationRecord 
    has_one :mission 
    accepts_nested_attributes_for :mission, update_only: true 
end 

# mission.rb 
class Mission < ApplicationRecord 
    belongs_to :company, optional: true 
    validates :description, presence: true, length: { maximum: 100 } 
end 

# companies_controller.rb 
class CompaniesController < ApplicationController 
    def edit 
    @company = Company.find(params[:id]) 
    @company.build_mission if @company.build_mission.nil? 
    end 

    def update 
    @company = Company.find(params[:id]) 
    @company.assign_attributes(company_params) 
    if @company.valid? 
     @company.save 
     redirect_to companies_path 
    end 
    end 

    private 

    def company_params 
    params.require(:company).permit(mission_attributes: [:id, :description, :_destroy]) 
    end 
end 

# edit.html.erb 
<%= form_for @company, :url => company_path(@company), :html => {class: 'ui form', method: :put} do |f| %> 
    <%= f.fields_for :mission do |mission| %> 
    <div class="field"> 
     <%= mission.label :mission %> 
     <%= mission.text_field :description %> 
    </div> 
    <% end %> 
    <%= f.button :submit => "", class: "ui button" %> 
<% end %> 

答えて

0

こんにちは私は良い睡眠の後に問題を解決することができます。企業のコントローラーレベルでif else条件を使いこなすだけでいいのです。編集方法は次のように変更する必要があります。 -

関連する問題