HABTM портит меня - Rails 3 - PullRequest
       22

HABTM портит меня - Rails 3

0 голосов
/ 11 декабря 2011

У меня установлены простые отношения HABM между пользователями и детьми.

Если ребенок принадлежит вам, я хочу, чтобы вы увидели ребенка и имя других пользователей, к которым принадлежит этот дочерний объект.По какой-то причине я не могу напечатать имя других пользователей, к которым принадлежит ребенок.

Я выбираю так:

@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
, все будет работать как положено.Все имена печатаются, что говорит мне о том, что не моя система аутентификации делает что-то подозрительное, а что-то другое ... вероятно, способ, которым я выбираю детей, хотя я пробовал несколько способов = (

Я не уверен, что я пропустилчто-то действительно очевидное, но это озадачило меня на несколько часов.

Любая помощь очень ценится. Спасибо.

РЕДАКТИРОВАТЬ - Добавить схему

По просьбе нижевот схема. Насколько я могу судить, отношения настроены нормально. Это просто получение нескольких пользователей на основе 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

Ответы [ 2 ]

0 голосов
/ 12 декабря 2011

Вы пытаетесь заполучить детей пользователя и в то же время заполучить всех остальных родителей?

Простой способ составить список детей пользователя и отобразить родителей каждого ребенка.будет:

@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 %>

пс:

в модели для детей

has_many :children_users
has_many :parents, :through => :children_users, :class_name => "User", :source => :user
0 голосов
/ 11 декабря 2011

Я верю, что это условие "users.id = ? ", current_user.id, которое делает загрузку только потомков current_user, и впоследствии, когда вы перебираете тех единственных пользователей, это текущий пользователь.

Что вы, вероятно, хотите, это выбрать на основе children.user_id:

@children = Child.where(user_id: current_user.id, enrolled: true).includes(:users)
...