2017-07-18 6 views
1

私は親の「アカウント」に多くの「優先度」があります。Ruby on Railsフォームの子アソシエーションを更新する

私は非常に簡単にこれらのアカウントの新しい優先順位を作成できますが、作成したアカウントは編集/更新できません。

アカウントモデル(親):

class Account < ApplicationRecord 
    has_many :priorities 
    accepts_nested_attributes_for :priorities 
end 

優先度モデル(子):

class Priority < ApplicationRecord 
    belongs_to :account 
end 

ルート:

resources :accounts do 
    resources :priorities 
    end 

priorities_controller.rb(ちょうど編集、更新、およびパラメータ)

class PrioritiesController < ApplicationController 

    def edit 
    @account = Account.find(params[:account_id]) 
    @priority = @account.priorities.find(params[:id]) 
    end 

    def update 
    @account = Account.find(params[:account_id]) 
    @priority = @account.priorities.update(priority_params) 

    end 

    private 
    def priority_params 
     params.require(:priority).permit(:name, :narrative, :kpis) 
    end 

end 

そして最後に、私のedit.html.erbは(そう、これはアカウント/#/優先順位/#/編集されて終わる)

<%= form_for(@account) do |a| %> 

<%= a.fields_for :priorities, @priority do |p| %> 
    <p> 
    <%= p.label :name %><br> 
    <%= p.text_field :name %> 
    </p> 

    <p> 
    <%= p.label :narrative %><br> 
    <%= p.text_area :narrative %> 
    </p> 

    <p> 
    <%= p.label :kpis, "KPIs" %><br> 
    <%= p.text_field :kpis %> 
    </p> 

    <p> 
    <%= p.submit %> 
    </p> 
<% end %> 
<% end %> 

すべてが本当によくこの時点まで上がります。フォームは正しい優先度のフォームデータを完全に取得し、そのアカウントIDに関連付けられていない優先度IDを入力しようとしても失敗します。私は、「更新の優先順位」をクリックすると、しかし、私が取得:

「アクション 『アップデートは』 AccountsController見つかりませんでした」

を今、私はエラーを追跡し、このコントローラ用の更新プログラムを作成することができますが、私はそれがAccountsControllerを起動させようとしているべきではないと考えています。優先コントローラを使うべきであるようです。

私はコンソールをチェックすると、要求はここで起こっているように見える実際: リクエストURLを:http://127.0.0.1:3000/accounts/2

私は申し訳ありませんが、私はこの質問への答えのために少なくとも10時間を検索することができましたそれを見つけません。ご協力いただきありがとうございます。

+0

ネストされたリソースで[form \ _for]が重複している可能性があります(https://stackoverflow.com/questions/2034700/form-for-with-nested-resources) – jvillian

答えて

0

this解答とthisの回答で述べたように、私はあなたのような何かをする必要があると信じて:あなたが指摘するように

<%= form_for [@account, @priority] do |f| %> 
    blah blah 
<% end %> 

を(第2リンクの答えから直接つりフェア帰属。)この:

<%= form_for(@account) do |a| %> 

が上updateアクションのURLを生成するつもりです10。レールがどのように動作するのかが正確に分かるからです。ネストされたリソースへのURLが必要な場合は、両方のインスタンス変数をform_for宣言に含める必要があります。

+0

これは正しい方向ですアップデートをテストしたとき、そのアカウント内のすべての優先順位が変更されたので、コントローラに何か問題があるはずです。ありがとうございました。 – Jake

+0

はい、私は優先順位更新コントローラを変更し、それが機能しました。どうもありがとうございます! – Jake

関連する問題