2017-09-01 16 views
0

属性の値を更新する際にlink_toを間違えて使用していますか、それとも単に構文に問題がありますか?どのように私はこれを修正することができますか?paramが存在しないか、値が空です。patch_toのエラー

link_toを使用して単一の属性を更新しようとするとエラーが発生します。 I私の意見では、次のコードを持っている:私は、ループ内のlink_toを使用しています

<%=link_to "Pay", event_attendee_path(event_attendee, :paid => true), :method => :patch%> 

を:<% @event_attendees.each do |event_attendee| %><%end%>

私はエラーを取得する:「paramは存在しないか、値が空である:event_attendee」私がしようとすると、私のコードを実行する。それはあなたが:event_attendee必要

params.require(:id).permit(:attendee_id, :event_id, :paid) 

でなければなりません

event_attendee GET /event_attendees/:id(.:format)  event_attendees#show 
        PATCH /event_attendees/:id(.:format)  event_attendees#update 
        PUT /event_attendees/:id(.:format)  event_attendees#update 
        DELETE /event_attendees/:id(.:format)  event_attendees#destroy 

答えて

1

を使用したい場合は、ビューに

form_for(@event_attendee) 

を使用することができますサーバーに送信されるのはモデルのIDだけです。サーバーではparams [:id]です。

あなたのコントローラでは、paramsにはevent_atendeeというキーが必要ですが、実際に送信するのはidだけです。

パッチルートでは、あなたが更新しようとしているオブジェクトを取得するために通常idが必要です。これまでのところすべてです。しかし、他の値も更新したいと思うでしょうか?ですから、私は、パッチメソッドを使ってlink_toにフォームデータを送る方法に関するドキュメントを見ていきます。

ルートにキーを含めることもできますが、より良い方法があるかもしれません。

+0

ご了承ください。ありがとう、これは私の問題に近づく方法を理解するのに役立ちました。 – Acrux

+0

@Acruxあなたの質問に答えた場合は、答えに答えを記入する必要があります。 :-) – andy

0

しかしルートは、それを解析して、それを設定します。

def event_attendee_params 
    params.require(:event_attendee).permit(:attendee_id, :event_id, :paid) 
end 

レーキ路線:

私は自分のコントローラに以下の持っています:id

0

あなたのコントローラで

@event_attendee.update(paid: params[:paid]) 

を使用するか、またはあなたは問題があなたのようにルーティングするためにモデルを渡すときということですpermit_params

関連する問題