在 finder 方法上出现 "wrong number of arguments" 错误
Getting "wrong number of arguments" error on finder method
我正在使用 Rails 4.2.3(并使用 MySQL 5.5.37)。我在为我的一个模型编写查找器方法时遇到了困难。我有“用户”、“对象”和“日期”列,但以下
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 方法的参数?我没有明确定义查找器方法,因为我认为“and”语法会起作用。
错误说:
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])
find_by_some_column_and_another
(dynamic finders) have been deprecated in favour of find_by
在 Rails 4+:
@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
我正在使用 Rails 4.2.3(并使用 MySQL 5.5.37)。我在为我的一个模型编写查找器方法时遇到了困难。我有“用户”、“对象”和“日期”列,但以下
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 方法的参数?我没有明确定义查找器方法,因为我认为“and”语法会起作用。
错误说:
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])
find_by_some_column_and_another
(dynamic finders) have been deprecated in favour of find_by
在 Rails 4+:
@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