Rails - 如何将对象添加到变量

时间:2011-12-18 00:44:34

标签: ruby-on-rails ruby loops

我想做这样的事情:

@profiles
#(I think in Java, so I have declared an @profiles variable there! I know it's probably wrong!)
@users.each do |user|
  profile = Profile.find(params[user.id])
  @profiles.add(profile)
end

用户和个人资料具有一对一的关系。

用户有一个个人资料, 个人资料属于用户

4 个答案:

答案 0 :(得分:6)

您需要初始化数组。


@profiles = []
@users.each do |user|
  profile = Profile.find(params[user.id])
  @profiles << profile if profile
end

如果你有关系,你应该只能说:


@profiles = []
@users.each do |user|
  profile = user.profile
  @profiles << profile if profile
end

答案 1 :(得分:1)

find已经返回了一个集合。

然而,在这种情况下,看起来你应该有一个成文关系:

class User
  has_one :profile
end

class Profile
  belongs_to :user
end

信息:has_onebelongs_to

答案 2 :(得分:1)

如果你的模型中有这个

class User
  has_one :profile
end

class Profile
  belongs_to :user
end

这在您的个人资料迁移中

t.integer :user_id

您可以找到这样的个人资料

@profiles = Profile.all

然后在你的观点中

<% @profiles.each do |profile| %>

<%= profile.user.name %>

<%end%>

<强>更新

如果你有

where('user_id LIKE?',“%#{search}%”)

试试这个型号/ user.rb。

def self.search(search)
    if search
      where('name LIKE ? ', "%#{search}%" )
    else
      scoped
    end
end

在控制器中:

@users = User.search(params [:search])

然后在你的观点中

<% @users.each do |user| %>

<%= user.profile.name %>

<%end%>

A Guide to Active Record Associations

答案 3 :(得分:0)

只需执行以下操作:

替换

 @profiles.add(profile)

 @profiles << profile

&lt;&lt; operator将右侧的元素添加到左侧的数组中。