【发布时间】:2011-12-11 11:44:01
【问题描述】:
我在用户和孩子之间建立了一个简单的 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
【问题讨论】:
-
link_to中的引号看起来不对... -
感谢缓存。这是一个问题,当我拿出 DIV 在这里过去时,因为 div 与问题无关。为了清楚起见,将 div 放回原处。
标签: ruby-on-rails activerecord ruby-on-rails-3.1 has-and-belongs-to-many