我正在使用 Rails 4.2.3。我的 Controller 里有这个……
def create
@myobject = MyObject.new(MyObject_params(:params))
@current_user = User.find(session["user_id"])
@myobject.user = @current_user
if @myobject.save
respond_to do |format|
format.html { redirect_to controller: "users", action: "index", notice: 'Saved successfully.' }
end
else
format.html { render action: "index" }
end
end
private
def MyObject_params(params)
# Main Code goes here
params.require(:myobject).permit(:time_in_ms, :name)
params[:myobject][:time_in_ms] = (params[:myobject][:hour].to_i * 60 * 60 + params[:myobject][:minute].to_i * 60 + params[:myobject][:second].to_i) * 1000
end
但是当我提交表单时,我收到了错误
private method `require' called for :params:Symbol
在这一行上,“params.require(:myobject).permit(:time_in_ms, :name, :distance, :distance_units)”。不知道我错过了什么(或者我不小心包括在内)。感谢您的帮助, - 戴夫
编辑:
尝试给出的建议后,我得到了错误
When assigning attributes, you must pass a hash as an argument.
在线上
@myobject = MyObject.new(MyObject_params)
除了在建议中进行调整外,我还将方法签名“def MyObject_params(params)”更改为“def MyObject_params”。
最佳答案
正如 Brad Werth 所说,您正在尝试将 :params 传递给您的 MyObject_params 方法。由于您已在 Controller 中将此方法标记为私有(private),因此它将拒绝接受显式接收器!有大量关于私有(private)、公共(public)和 protected ruby 方法的信息,但总而言之,您不能直接在对象上调用任何私有(private)方法(例如 @user.make_admin
)。这可以保护您免受外部来源试图操纵某些方法的使用。
更改 @myobject = MyObject.new(MyObject_params(:params))
到
@myobject = MyObject.new(MyObject_params)
是你想要的。我还建议遵循 Ruby 最佳实践并将您的 MyObject_params 方法缩减为
my_object_params
关于ruby-on-rails - 获取 "private method ` 需要'调用 :params:Symbol"when trying to save my object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37368716/