获得"错误的参数数量" finder方法的错误

时间:2016-02-06 03:31:03

标签: ruby-on-rails model arguments finder

我正在使用Rails 4.2.3(并使用MySQL 5.5.37)。我在为我的一个模型编写finder方法时遇到了困难。我有“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方法,因为我认为“和”语法可行。

2 个答案:

答案 0 :(得分: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])

答案 1 :(得分:0)

find_by_some_column_and_anotherdynamic 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: / {{1 } / object:声明(如day:所述)

其次,您还需要确保正确构建行动:

@miler350