【问题标题】:Datamapper - Find each client by projectDatamapper - 按项目查找每个客户
【发布时间】:2010-08-08 20:48:19
【问题描述】:

我想按客户查看每个项目,但不确定如何使用 Datamapper 获取此信息。我的关系设置如下:

class Client
    property :id, Serial
    property  :name, String
    has n, :projects, :foreign_key => "company_id"
end

class Project
  include DataMapper::Resource
  property :id, Serial
  property  :title, String
  belongs_to :company, "Client"
  has n, :stages
end

我想输出如下列表:

客户 1

  • 项目A
  • 项目 B
  • 项目 C

客户端 2

  • 项目 D
  • E 计划

从 Datamapper 中获取此内容的最佳方法是什么?视图模板是什么样的?

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby orm sinatra datamapper


    【解决方案1】:

    DataMapper 没有 foreign_key 选项。我是:child_key

    所以你需要改变你的客户模型

    class Client
        property :id, Serial
        property  :name, String
        has n, :projects, 'Project', :child_key => [:company_id]
    end
    

    在您可以通过客户端迭代所有项目之后

    <% Client.all.each do |client| %>
    <%= client.name %>
    <ul>
      <% client.projects.each do |project| %>
      <li><%= project.title %></li>
      <% end %>
    </ul>
    <% end %>
    

    【讨论】:

    • 感谢您到目前为止的帮助,在数据库中,我的 Projects 表现在有一个正确的 company_id。但是视图只输出客户端名称,client.projects.each 中没有任何内容,我可以通过什么方式调试?
    • 是的,我有:~ (0.000582) SELECT "id", "name", "client_slug" FROM "clients" ORDER BY "id" ~ (0.000094) SELECT "id", " title", "project_id" FROM "projects" WHERE "project_id" IN (2, 14, 15, 19, 20, 24, 28, 42, 43) ORDER BY "id""
    • 如果你在你的 has_n.我为此更新了我的答案。
    【解决方案2】:
    # Find all clients (this should go in a controller of some kind)
    @clients = Client.all # Maybe you want to order them here too
    

    查看...

    <% @clients.each do |client| %>
    <%= client.name %>
    <ul>
      <% client.projects.each do |project| %>
      <li><%= project.title %></li>
      <% end %>
    </ul>
    <% end %>
    

    【讨论】:

    • 这给了我一个“条件:foreign_key 没有映射到 MyApp::Project 中的属性或关系”我不需要在某处做 Projects.all() 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多