【问题标题】:Getting "wrong number of arguments" error on finder method在 finder 方法上出现“错误数量的参数”错误
【发布时间】:2016-02-06 03:31:02
【问题描述】:

我使用的是 Rails 4.2.3(和 MySQL 5.5.37)。我很难为我的一个模型编写查找器方法。我有列“user”、“object”和“day”,但以下

  def find_by_user_object_and_day
    respond_to do |format|
      @current_user = User.find(session["user_id"])
      format.js {
        render :text => Userobject.find_by_user_and_object_and_day(:user => @current_user, :object => params[:object], :day => params[:day]) 
      }
    end
  end

产生错误

F, [2016-02-05T16:49:42.934112 #12058] FATAL -- : 
ArgumentError (wrong number of arguments (given 1, expected 3)):
  app/controllers/user_objects_controller.rb:77:in `block (2 levels) in find_by_user_object_and_day'
  app/controllers/user_objects_controller.rb:74:in `find_by_user_object_and_day'

如何正确指定 finder 方法的参数?我没有明确定义那个 finder 方法,因为我认为“and”语法会起作用。

【问题讨论】:

  • 你能发布find_by_user_and_object_and_day方法吗?

标签: ruby-on-rails model arguments finder


【解决方案1】:

错误提示:

ArgumentError (wrong number of arguments (given 1, expected 3))

这意味着你应该传入 3 个不同的参数,但你传入了 1 个。看起来你传入的是哈希值而不是独立值。

替换:

 Userobject.find_by_user_and_object_and_day(:user => @current_user, :object => params[:object], :day => params[:day])

有了这个:

Userobject.find_by_user_and_object_and_day(@current_user, params[:object], params[:day])

【讨论】:

  • 对我来说仍然看起来像 3 个参数?...虽然你对他们的声明是正确的
  • 应该是 3 个参数:(wrong number of arguments (given 1, expected 3))。他只提交了 1 个参数(哈希)
【解决方案2】:

find_by_some_column_and_another (dynamic finders) 在 Rails 4+ 中已弃用,取而代之的是 find_by

@user = UserObject.find_by user: @current_user, object: params[:object], day: params[:day]

使用上面的代码结构应该解决你的问题(find_by 需要一个散列并且需要只有1 参数)。

如果您仍想使用动态查找方法,则需要确保已填充 params[:object]params[:day] 值,并删除 user:/object:/day: 声明(正如@miler350所提到的)


其次,您还需要确保正确构建操作:

def find_by_user_object_and_day
    @current_user = User.find session["user_id"]
    @user_object  = UserObject.find_by user: @current_user, object: params[:object], day: params[:day] 

    respond_to do |format|
      format.js { render text: @user_object }
    end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多