0

私は、ユーザーと子供の間に設定された単純なHABM関係を持っています。HABTM messing me up - Rails 3

子があなたに属している場合は、子とこの子オブジェクトが属する他のユーザーの名前を確認してください。何らかの理由で、私はその子が属する他のユーザーの名前を表示できません。

私は、次のような選択:

@children = Child.all(:include => :users, :conditions => ["users.id = ? AND enrolled = ?", current_user.id, true]) 

、そのように印刷しよう:

<% for user in child.users%> 
    <% if can? :manage, Child %> 
    <a rel='tipsy'><%= link_to '[#{user.first_and_last_name}]', edit_child_path(child), :title => "#{user.updateChoice}"%></a> 
    <%else%> 
    <a rel='tipsy'><%= link_to '[#{user.first_and_last_name}]', new_parentnote_path, :title => "#{user.updateChoice}"%></a> 
    <%end%> 
<%end%> 

それは右の子供を選択したが、他のユーザーの名前を印刷しません。現在のユーザーの名前のみ。

すべての子供を選択した場合、

Child.all
はすべて正常に動作します。すべての名前が印刷され、私の認証システムでは何か怪しげなことをするのではなく、他の何かをしていると言われています...私はいくつかの方法を試しましたが、おそらく私は子供を選んだのです=(

本当に何かが欠けているかどうかはわかりません明らかにこれは時間のために私が困惑している

すべてのヘルプは大歓迎ですおかげ

EDIT - 。。。。怒鳴るここに要求されたスキーマであるに追加スキーマ

関係は、微細な設定されています私が知る限りでは、それはただの上記で説明したように起こっていないcurrent_userに基づいて複数のユーザーを作成します。 子が複数のユーザーを持っていても上記のクエリを使用すると(私はchild.countを実行することによってそれを認識します)、何らかの理由で現在のユーザーの名前のみを出力します。よく

create_table "children_users", :id => false, :force => true do |t| 
    t.integer "child_id" 
    t.integer "user_id" 
    end 

次に子供がいます。

create_table "children", :force => true do |t| 
    t.string "first_name" 
    t.string "last_name" 
    t.boolean "enrolled",   :default => true 
    t.datetime "unenrolled_datetime" 
    end 

とユーザー

create_table "users", :force => true do |t| 
    t.string "email" 
    t.string "encrypted_password" 
    t.string "first_name" 
    t.string "last_name" 
    ........ other stuff to reset password etc 
    end 
+0

あなたの中に引用符'link_to'が間違っています... –

+0

キャッシュしてくれてありがとう。 DIVが問題に関連していなかったので、DIVを過去に取り出したときの問題でした。分かりやすくするためにdivsを正確にそこに戻してください。 – Yuri

答えて

0

ユーザーの子どもをリストアップし、それぞれの子どもの両親を表示する簡単な方法は次のようになり

@children = current_user.children 

<%= @children.each do |child| %> 
    <h2><%= child.first_name %></h2> 
    <%= @child.parents.each do |parent| %> 
     <p><%= parent.first_name %></p> 
    <% end %> 
<% end %> 

PS:子供モデルの

has_many :children_users 
has_many :parents, :through => :children_users, :class_name => "User", :source => :user 
+0

ロビン、あなたはその日を救った。ありがとうございました。私はユーザhas_manyをしなかった:あなたの例は私の現在のHABTMで働いた。 @children = current_user.children'を使用して、 '@children = Child.all(:include =>:users、:conditions => [" users.id =?AND enrolled =? "、current_user.id、true)それだけで働いた。私は思っていたはずです/それを試してみました。名誉! – Yuri

+1

私の喜び;)また、それはディテールですが、もしあれば? :manage、Child'の部分がループの外側にある可能性があります: 'can_manage_children = can? :manage、Child; 'ループでは、単に' <%= link_to '[#{user.first_and_last_name}]', can_manage_children ? edit_child_path(child) : new_parentnote_path, :title => "#{user.updateChoice}"%> 'を実行します。また、レール3.1を使用しているので、クエリを書く方法を更新する必要があります:)。 – Robin

+0

.findと.allの代わりに.whereにクエリを書き込む方法を更新しています。私はまだ一般的にHABTMクエリのハングを取得しています。これは私の最初の刺すことです。 =) – Yuri

0

私はそれがCURRENT_USERの子だけをロードします条件"users.id = ? ", current_user.idだ信じ、そしてあなたがそれらを反復する場合、その後そこに唯一のユーザーは、現在のユーザーです。

何がprobbly children.user_idに基づいて選択されたい:

@children = Child.where(user_id: current_user.id, enrolled: true).includes(:users) 
あなたはユーザーの子供を取得しようとすると同時に、他のすべての親を取得している
+0

返信いただきありがとうございます。しかし、私はchild.user_id列を持っていません。私はあなたの提案を試み、(PGError:エラー:列children.user_idは存在しません)。 現在Dev。 dbには2人の子供しかいません。どちらも複数のユーザーがいます。なぜそれが機能していないのか、私は非常に混乱しています。 – Yuri

+0

あなたのスキーマに関するすべての詳細と、達成しようとしていることをご記入ください。 – clyfe

+0

は、私が達成しようとしているもののスキーマと詳細を追加しました。ご協力ありがとうございました。 – Yuri

関連する問題