Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中使用参数会导致ArgumentError:分配属性时,必须将哈希作为参数传递_Ruby On Rails_Ruby_Ruby Hash - Fatal编程技术网

Ruby on rails 在rails中使用参数会导致ArgumentError:分配属性时,必须将哈希作为参数传递

Ruby on rails 在rails中使用参数会导致ArgumentError:分配属性时,必须将哈希作为参数传递,ruby-on-rails,ruby,ruby-hash,Ruby On Rails,Ruby,Ruby Hash,我使用的params是一个散列,但仍然会出现以下错误,即ArgumentError(分配属性时,必须将散列作为参数传递)。以下是我的部分代码: Project/app/controllers/index\u controller.rb: class IndexController < ApplicationController helper_method :create def create @post = Post.new(params[:data_val

我使用的params是一个散列,但仍然会出现以下错误,即ArgumentError(分配属性时,必须将散列作为参数传递)。以下是我的部分代码:

Project/app/controllers/index\u controller.rb:

class IndexController < ApplicationController
    helper_method :create
    def create
        @post = Post.new(params[:data_value])
    end
end
class Post < ActiveRecord::Base
    belongs_to :user
    has_many :posts, :dependent => :delete_all
end
Rails.application.routes.draw do
  root "index#index"
  post "/customurl", to: "index#create"
end
$.ajax({
    url : "/customurl",
    type : "post",
    data : { data_value: "Hello" }
})
来自Project/app/assets/javascripts/index.js的ajax请求:

class IndexController < ApplicationController
    helper_method :create
    def create
        @post = Post.new(params[:data_value])
    end
end
class Post < ActiveRecord::Base
    belongs_to :user
    has_many :posts, :dependent => :delete_all
end
Rails.application.routes.draw do
  root "index#index"
  post "/customurl", to: "index#create"
end
$.ajax({
    url : "/customurl",
    type : "post",
    data : { data_value: "Hello" }
})

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

params[:data\u value]
传递给Post对象。在脚本中,它看起来像是
参数[:data\u value]
等于
“Hello”
。相反,
Post.create
需要一个散列


您应该执行
Post.create(params)
Post.create(data\u-value:params[:data\u-value])
。另外,请检查以确保您的参数安全。

您可以使用服务器日志中的
参数更新问题吗?您很正确!我得到了
ActiveModel::禁止属性错误
当我这样做时,
post=post.create(params)
Yes,
post.create(params)
是一个坏例子。尝试从
参数中提取值。e、 g.
Post.create(data\u-value:params[:data\u-value])
。但首先,我强烈建议阅读强参数。它还将有助于使用params处理此问题。