在rails中使用params会产生ArgumentError:在分配属性时,必须将哈希作为参数传递

时间:2017-05-24 06:37:06

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

我正在使用params这是一个哈希,但是我得到这个错误说明ArgumentError(当分配属性时,你必须传递一个哈希作为参数。)以下是我的代码的一部分:

项目/应用/控制器/ index_controller.rb:

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

项目/应用/模型/ post.rb:

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

项目/配置/ routes.rb中:

Rails.application.routes.draw do
  root "index#index"
  post "/customurl", to: "index#create"
end
来自项目/ app / assets / javascripts / index.js的 ajax请求:

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

当我从视图中打印create方法的返回值时,它会为每个调用显示一个随机的十六进制值。任何人都可以通过让我知道我正在做的错误来帮助我。

1 个答案:

答案 0 :(得分:3)

您将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以确保您的参数安全。