【问题标题】:Using params in rails gives ArgumentError: When assigning attributes, you must pass a hash as an argument在 rails 中使用 params 会产生 ArgumentError: When assignment attributes, you must pass a hash as a argument
【发布时间】:2017-05-24 06:37:06
【问题描述】:

我正在使用作为哈希的参数,但我仍然收到此错误,说明 ArgumentError(分配属性时,您必须将哈希作为参数传递。)以下是我的部分代码:

项目/app/controllers/index_controller.rb:

class IndexController < ApplicationController
    helper_method :create
    def create
        @post = Post.new(params[:data_value])
    end
end

项目/app/models/post.rb:

class Post < ActiveRecord::Base
    belongs_to :user
    has_many :posts, :dependent => :delete_all
end

项目/config/routes.rb:

Rails.application.routes.draw do
  root "index#index"
  post "/customurl", to: "index#create"
end

来自 Project/app/assets/javascripts/index.js 的 ajax 请求:

$.ajax({
    url : "/customurl",
    type : "post",
    data : { data_value: "Hello" }
})

当我从视图中打印create 方法的返回值时,它会为每个调用显示一个随机的十六进制值。谁能帮助我,让我知道我做错了什么。

【问题讨论】:

  • 你能用params更新服务器日志中的问题吗?

标签: ruby-on-rails ruby ruby-hash


【解决方案1】:

您将params[:data_value] 传递给 Post 对象。从您的脚本来看,params[:data_value] 等于 "Hello"。相反,Post.create 需要一个哈希。

您应该使用Post.create(params)Post.create(data_value: params[:data_value])。另外,请查看https://github.com/rails/strong_parameters 以确保您的参数安全。

【讨论】:

  • 你是正确的!
  • 我收到ActiveModel::ForbiddenAttributesErrorpost = Post.create(params)
  • 是的,Post.create(params) 是个坏例子。尝试从params 中提取值。例如Post.create(data_value: params[:data_value]).
  • 但首先,我强烈建议您阅读有关强参数的信息。它还有助于使用参数处理此问题。
猜你喜欢
  • 1970-01-01
  • 2021-04-01
  • 2020-12-20
  • 2021-03-19
  • 1970-01-01
  • 2022-12-02
  • 2022-12-02
  • 2017-08-07
  • 1970-01-01
相关资源
最近更新 更多