Ruby on rails 每个带有索引的_不适用于数组rails

Ruby on rails 每个带有索引的_不适用于数组rails,ruby-on-rails,ruby,activerecord,ruby-on-rails-4,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 4,当每个带有

每个带有
与从查询返回的
活动记录的
数组一起使用时,以及当我调用模型的
属性时。对于
属性

控制器

@user_contact_query=Usercontact.select("*")
@available_contacts_array=Array.new
@user_contact_query.each do |variable|
  @user_query=User.find( :all,:conditions => ["id = ?",variable.relator_id])
  @available_contacts_array.push(@user_query)  
end
查看

<% @available_contacts_array.each_with_index do |variable, index| %>
  <%= variable.email %>
<% end %>

你为什么不直接做呢

控制器的帮助程序

@array = Usercontact.select( "*" ).map do| variable |
   User.find( :all,:conditions => [ "id = ?",variable.relator_id ])
end
@array.each.with_index do| variable, index |
   # ...
end
视图的辅助对象

@array = Usercontact.select( "*" ).map do| variable |
   User.find( :all,:conditions => [ "id = ?",variable.relator_id ])
end
@array.each.with_index do| variable, index |
   # ...
end

一般注意事项:您将被用于
@available\u contacts\u数组
变量混合类型中,这可能导致错误,请不要这样做。

首先请发布您的完整错误消息。虽然没有看到错误,但我可以肯定地告诉您,问题是由您调用nil对象上的方法引起的,即您认为某个值存在于它实际上不存在的位置

除此之外,您真的应该更加关注您的代码。你现在的代码简直太可怕了。这相当于您的代码:

@available = []

UserContact.find_each do |contact|
  @available << User.find(contact.relator_id)
end
@available=[]
UserContact.find| u每个do|联系人|

@可用好的,一步一步,因为这是相当糟糕的代码:

@user_contact_query = Usercontact.select("*")
这里的选择部分有点奇怪,我会使用
.all
。否则就没问题了

@available_contacts_array = Array.new
因为在下一行中,您无论如何都要分配一个数组,所以这里不需要“初始化”这个变量,您可以省略这一行。(大多数Ruby程序员在大多数情况下都会使用
[]
初始化空数组)

假设我们从查询中获得了一些记录,那么现在应该有一个包含用户联系人对象的数组。再一次简单的
。就我所知,所有的
都会产生类似的效果。但是假设Usercontact有
电子邮件
,这很好,并且符合您的期望

@user_contact_query.each do |variable|
  @user_query = User.find(:all, :conditions => ["id = ?", variable.relator_id])
  @available_contacts_array.push(@user_query)  
end
如果我没弄错的话,你要做的就是检查你找到的所有用户联系人,找到与之相关的每个用户(可能不止一个),然后将结果附加到Usercontacts数组的末尾。因此,该阵列中混合了用户和用户联系人。(如果两者都有电子邮件,这在您看来仍然有效,因为多亏了duck,Ruby才不会在意。但很可能两者中的一个都缺少
电子邮件
)。此外,如果找到多个用户,则推送一个用户数组。而且一个数组肯定没有
电子邮件

好的,通过您的编辑,它变得简单了。当您使用
:all
find
时,您得到的不是一条记录,而是一组记录(即使只有一条记录)。您只需执行以下操作:

User.find(variable.relator_id)
然后找到一条记录并将其放入数组中。我猜这就是你期望它做的


Rails中有更好的方法可以做到这一点,但这需要正确定义模型,您使用的
relator\u id
使其看起来不太可能。

downvoter是什么?.select(“*”)没有意义,应该使用User.find(id)而不是User.find(:all,:conditions…)并且您的每个带有\u索引的调用都包含一个输入错误,也就是说,它不起作用。我甚至不会开始格式化…@TanelSuurhans哪一个是打字错误?我不知道作者想用
select(“*”)
说些什么。所以我只是复制了代码。对不起,不是打字错误,我的错。这只是一种利用索引进行循环的非常未得到充分利用且看起来很像外国人的方法。带索引的每个_与带索引的每个_index@TanelSuurhans不,这只是使用索引的常用方法,而且更合适。对不起,我正在尝试一些东西并将其发布在这里,没有撤消更改。谢谢回答,我编辑了问题,犯了一个错误