2011-12-18 3 views
2

にオブジェクトを追加するためにどのように私はこのような何かをしたいと思い:Railsの - 変数

@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 

ユーザーとプロファイルが1対1の関係を持っています。

は、ユーザは、1つのプロファイルは、 プロファイルは、ユーザーに属してい

+1

あなたがそこに '@のprofiles'変数を「宣言」していない:あなたが関係を持っている場合は

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

して、あなただけ言うことができるはずです。そのインスタンス変数を調べようとしましたが、存在しないので、行は 'nil'と評価されます。 – d11wtq

答えて

5

あなたが必要配列を初期化します。


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

編集のためのd11wtqありがとう:) – daniel

0

単純に次の操作を行います。

は置き換え

@profiles.add(profile) 

@profiles << profile 

< <オペレーター要素を追加してthの右に左の配列。

+0

私は試しましたが、@profilesに.nilエラーを表示します – spuriosity

+0

以下を見て、@profileを最初に設定する必要があります。 – daniel

1

findは既にコレクションを返します。この場合

が、しかし、それはあなたが成文化関係を持っている必要があり、より以下のようになります。

class User 
    has_one :profile 
end 

class Profile 
    belongs_to :user 
end 

情報:has_onebelongs_to

+0

は私の持っているものです。コレクションに基づいてプロファイルのコレクションを取得しようとしています。 user.idがuser.idの場合はuser.idです。 – spuriosity

+0

@spuriosityこれがあなたが持っているものなら、なぜそれを見せなかったのですか?どのようにユーザーのプロフィールを保存していますか? Railsが無料であなたに提供したとき、なぜあなたは団体を再構築していますか? –

+0

私はwhere( 'user_id LIKE?'、 "%#{search}%")を使って(プロファイルobj内で)検索していますが、これは明らかにプロファイルテーブルのIDを検索しています。プロファイルテーブルにではなく、プロファイルに関連付けられたユーザーのテーブルを検索する必要があります。回避策を見つけようとしています。 – spuriosity

1

あなたがあなたのモデルでこれを持っている場合

class User 
    has_one :profile 
end 

class Profile 
    belongs_to :user 
end 

これはあなたのプロフィールの移行で

t.integer :user_id 

あなたは

どこ( 'LIKE USER_ID持っている場合は、あなたの意見

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

<%= profile.user.name %> 

<%end%> 

更新

にこの

@profiles = Profile.all 

、その後のようなプロファイルを見つけることができますか? '、 "%#{search}%")

このモデル/ user.rbをお試しください。

コントローラで
def self.search(search) 
    if search 
     where('name LIKE ? ', "%#{search}%") 
    else 
     scoped 
    end 
end 

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

、その後、あなたの意見で

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

<%= user.profile.name %> 

<%end%> 

A Guide to Active Record Associations

+0

私はこれを持っています:( 'user_id LIKE?'、 "%#{search}%")、そして私が必要とするのは、そのuser_idのユーザーの.name属性を検索することです – spuriosity

+0

私は答えを更新しました。私は明日近くに見てみましょう –