Using params in rails gives ArgumentError: When assigning attributes, you must pass a hash as an argument
Using params in rails gives ArgumentError: When assigning attributes, you must pass a hash as an argument
我正在使用作为散列的 params,但我仍然收到此错误,指出 ArgumentError(分配属性时,您必须将散列作为参数传递。)这是我的部分代码:
Project/app/controllers/index_controller.rb:
class IndexController < ApplicationController
helper_method :create
def create
@post = Post.new(params[:data_value])
end
end
Project/app/models/post.rb:
class Post < ActiveRecord::Base
belongs_to :user
has_many :posts, :dependent => :delete_all
end
Project/config/routes.rb:
Rails.application.routes.draw do
root "index#index"
post "/customurl", to: "index#create"
end
ajax 来自 Project/app/assets/javascripts/index.js 的请求:
$.ajax({
url : "/customurl",
type : "post",
data : { data_value: "Hello" }
})
当我从视图中打印 create
方法的 return 值时,它会为每次调用显示一个随机的十六进制值。任何人都可以帮助我让我知道我在做什么错误。
您将 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 以确保您的参数安全。
我正在使用作为散列的 params,但我仍然收到此错误,指出 ArgumentError(分配属性时,您必须将散列作为参数传递。)这是我的部分代码:
Project/app/controllers/index_controller.rb:
class IndexController < ApplicationController
helper_method :create
def create
@post = Post.new(params[:data_value])
end
end
Project/app/models/post.rb:
class Post < ActiveRecord::Base
belongs_to :user
has_many :posts, :dependent => :delete_all
end
Project/config/routes.rb:
Rails.application.routes.draw do
root "index#index"
post "/customurl", to: "index#create"
end
ajax 来自 Project/app/assets/javascripts/index.js 的请求:
$.ajax({
url : "/customurl",
type : "post",
data : { data_value: "Hello" }
})
当我从视图中打印 create
方法的 return 值时,它会为每次调用显示一个随机的十六进制值。任何人都可以帮助我让我知道我在做什么错误。
您将 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 以确保您的参数安全。