ruby-on-rails - 获取 "private method ` 需要'调用 :params:Symbol"when trying to save my object

标签 ruby-on-rails ruby-on-rails-4 methods params

我正在使用 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/

相关文章:

javascript - 如何让这段 CoffeeScript TurboLinks 5 变得友好?

css - 对 custom.css.scss 进行微小更改后 Bootstrap 无法正常工作

JavaScript:在类中使用原型(prototype)方法来控制台日志 ### 代替数组中的字母

java - 如何在循环链表中插入字符串(我想检查循环链表中的重复单词)?

javascript - rails : Javascript for tracking sessions firing inconsistently

ruby-on-rails - 安装 ruby gem

ruby-on-rails - 检查一个日期是否在另外两个日期之间

devise - 没有将 Symbol 隐式转换为 Integer

iOS Swift 内联重写类方法

ruby-on-rails - Rails 根据集合大小多次渲染部分