私は親の「アカウント」に多くの「優先度」があります。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時間を検索することができましたそれを見つけません。ご協力いただきありがとうございます。
ネストされたリソースで[form \ _for]が重複している可能性があります(https://stackoverflow.com/questions/2034700/form-for-with-nested-resources) – jvillian