【发布时间】:2017-09-13 09:26:01
【问题描述】:
升级到 Rails 5 后,我的 jQuery .ajax 请求出现问题。我相信这与(有些)新的强参数有关。我收到以下错误:
ArgumentError (When assigning attributes, you must pass a hash as an argument.):
我认为我在我的 .ajax 请求中错误地设置了我的数据包(使用 Coffeescript)。
或者可能是我信任的参数无法正常工作。
使用 byebug,我的控制器的第一行似乎没问题,但它在第二行失败:@prospect.update(prospect_params[:status])。这是 byebug 中的 @_params 变量:
1: @_params = <ActionController::Parameters {"prospect"=><ActionController::Parameters {"id"=>"16", "status"=>"inactive"} permitted: false>, "controller"=>"prospects", "action"=>"update_status"} permitted: false>
这是来自我的控制器的 sn-ps 和 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
咖啡脚本
# 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
【问题讨论】:
-
您希望 params 哈希看起来像什么?
标签: jquery ruby-on-rails ajax coffeescript ruby-on-rails-5