Rails 5にアップグレードした後、jQueryの.ajaxリクエストに問題があります。私はこれが(幾分)新しい強力なパラメータと関係していると信じています。次のエラーが表示されます。Rails 5 jQuery .ajaxメソッドのデータ形式
ArgumentError (When assigning attributes, you must pass a hash as an argument.):
私の.ajaxリクエスト(Coffeescriptを使用)でデータパッケージを正しく設定していないと考えています。
おそらく、私の信頼できるパラメータが正しく動作していない可能性があります。
byebugを使用すると、私のコントローラの最初の行は大丈夫ですが、2行目で失敗します。@prospect.update(prospect_params[:status])
。
1: @_params = <ActionController::Parameters {"prospect"=><ActionController::Parameters {"id"=>"16", "status"=>"inactive"} permitted: false>, "controller"=>"prospects", "action"=>"update_status"} permitted: false>
ここ
私のコントローラからの抜粋であり、Coffescript
コントローラ
# PUT /prospects/update_status
def update_status
@prospect = Prospect.find(params[:id])
@prospect.update(prospect_params[:status])
respond_to do |format|
if @prospect.update_attributes(prospect_params)
format.json { head :no_content }
else
format.json { render json: @prospect.errors, status: :unprocessable_entity }
end
end
end
...
private
# Use callbacks to share common setup or constraints between actions.
def set_prospect
@prospect = Prospect.find(params[:id])
end
# Only allow a trusted parameter "white list" through.
def prospect_params
params.require(:prospect).permit(:name, :status, :priority, :id)
end
:ここbyebugで@_params変数ですCoffeescript
# Update prospects active list when a toggle switch is clicked
$("#prospects_list").on "change", ".js-switch", ->
prospect_id = $(this).parent('form').find('input[name="prospect[id]"]').val()
if @checked
status = 'active'
else
prospect_status = 'inactive'
# Get parent TR
tr = $(this).closest('tr')
# Update prospect using Ajax
$.ajax
url: '/prospects/update_status'
type: 'POST'
data: { prospect: {id: prospect_id, status: prospect_status } }
dataType: 'json'
success: (data) ->
return
false
に小さな変更が必要? – the12