Mysql ArgumentError(参数数目错误(2对1))-'find'和'create'用于RoR应用程序

Mysql ArgumentError(参数数目错误(2对1))-'find'和'create'用于RoR应用程序,mysql,ruby-on-rails,Mysql,Ruby On Rails,谢谢你能提供的任何帮助!我已经回顾了与此错误相关的其他主题,但未能找到解决我的问题的方法 我已经为我的RubyonRails应用程序准备了一个HTML表单和两个MYSQL数据库表。我的第一个表有主位置:带有昵称、ID和地址的兴趣点。表单允许用户通过其昵称从下拉列表中选择主位置。我的第二个表newsavedmap保存用户选择的主位置 我的目标是: 查看下拉列表中选择的masterlocation昵称是否与我的masterlocation数据库中任何masterlocation的昵称匹配 如果是,我

谢谢你能提供的任何帮助!我已经回顾了与此错误相关的其他主题,但未能找到解决我的问题的方法

我已经为我的RubyonRails应用程序准备了一个HTML表单和两个MYSQL数据库表。我的第一个表有主位置:带有昵称、ID和地址的兴趣点。表单允许用户通过其昵称从下拉列表中选择主位置。我的第二个表newsavedmap保存用户选择的主位置

我的目标是:

查看下拉列表中选择的masterlocation昵称是否与我的masterlocation数据库中任何masterlocation的昵称匹配

如果是,我想将主位置的ID保存到@newsavedmap.start\u masterlocation\u ID

我想我就快到了,但是我用我当前的代码得到了ArgumentError错误数量的参数2对1

控制器

错误代码

在@newsavedmap.start\u masterlocation\u id=@masterlocation.findparams[:id],:conditions=>{:昵称=>params[:startthere]}的行中发生

    ArgumentError (wrong number of arguments (2 for 1)):
    app/controllers/newsavedmaps_controller.rb:66:in `find'
    app/controllers/newsavedmaps_controller.rb:66:in `create'
更新1

多亏了vinodadhikary,我在下面添加了Masterlocation行,但我用=>和冒号对其进行了更新。但是,该ID未保存到数据库中。相反,记录的字段更新为

    --- []
代码


这里有几点需要注意。Masterlocation.all返回一个数组,当您执行Array.find时,它将依次返回枚举数

您可以通过在rails控制台中测试以下各项来检查这些问题:

因此find方法只接受一个参数ref doc:并且您试图提供两个参数,因此出现了错误

解决方法是:

@masterlocation.find{|ml| ml.id == params[:id] and ml.nickname == params[:startthere]}
但问题是,为什么要检索所有主位置,然后在ruby端使用find,而不是通过ActiveRecords在数据库中使用find,如下所示

Masterlocation.find(:all, conditions: { :id => params[:id], :nickname => params[:startthere]})

请编辑您的问题摘要以添加更多上下文,错误代码是不够的。此外,还添加了有关错误代码回溯的更多信息,第…行……只是添加了一些有关错误的附加信息。如果这是你需要的,请告诉我。谢谢!请看我的更新。您的回复中可能有一些语法问题吗?@KDP,在我测试这些问题时,不应该有任何语法错误。我唯一要仔细检查的是像id这样的字段名,我假设您没有更改。除此之外,我在代码中看到的唯一问题是将返回值赋给@newsavedmap.start\u masterlocation\u id,该语句返回一个数组,因此如果您确定条件匹配一条且仅匹配一条记录,则可以执行masterlocation。find:all,:conditions=>{id=>params[:id],:昵称=>params[:startthere]}.第一身份证。试试看。当我执行@newsavedmap.start\u masterlocation\u id=masterlocation.find:all,:conditions=>{:id=>params[:id],:昵称=>params[:startthere]}.first.id时,将保存一个数字。但是,它不是主位置的ID。有没有办法保存ID?@KDP,当你说它不是主位置的ID时,你是什么意思?你能再解释一下吗?当然!我试图使@newsavedmap.start\u masterlocation\u id等于昵称与params[:startthere]匹配的masterlocation的id。由于某些原因,@newsavedmap.start\u masterlocation\u id未保存为masterlocation的id。出于某种原因,它总是第四个。如何使保存的值成为昵称与params[:startthere]匹配的Masterlocation的ID?
@masterlocation.class
=> Array

@masterlocation.find().class
=> Enumerator
@masterlocation.find{|ml| ml.id == params[:id] and ml.nickname == params[:startthere]}
Masterlocation.find(:all, conditions: { :id => params[:id], :nickname => params[:startthere]})