我想从多个数据库RoR创建一个HTML表

时间:2016-01-17 22:55:38

标签: mysql ruby-on-rails ruby

我对rails的ruby相当新,但是我想从我的MySQL数据库构建这个表,包括两个表,Parent和Children。

enter code here

儿童(:id,:name,:parentId)
父(:id,:name,:childId)

以下是HTML代码:

<% @children.each do |child| %>
    <tr>
        <td><%= link_to child.name, child_path(child) %></td>
        <td><%= child.ticker %></td>
        <td><%= link_to child.parent, parent_path(parent) %></td>
    </tr>
<% end %>

该表可以链接到两个表的show path,但仅限于child.parentId = parent.id。该表位于我的带有控制器的表格页面

class StaticPagesController < ApplicationController

  def table
     @children = Child.all.order('name ASC')
          if params(:id) == child.parentId
              @parent = Parent.find(params[id])
          else
              @parent = NULL
          end
   end
end

我知道这是不正确的,但我正在努力创建这个表。任何反馈或参考都是有帮助的!

提前谢谢。

2 个答案:

答案 0 :(得分:0)

如果您使用的是sqlite3,那么您的应用程序的数据库应该已经在db / development.sqlite3下。

答案 1 :(得分:0)

我不是100%肯定你在这里想要达到的目标,但也许我可以提供帮助。如果我弄错了,请随时在评论中纠正我。

首先,您的Parent表格不需要我能看到的childId列。如果没有它,Rails仍然可以告诉哪些父母哪个孩子以及哪些孩子属于哪个父母。我建议摆脱它。

对于Child表,请考虑将parentId替换为parent_id。 Rails默认使用后者,除非你有充分的理由,否则通常更容易使用默认值。

考虑到这些因素,这两个模型的migrations可能看起来像这样:

<强>分贝/迁移/ [时间戳] _create_parents.rb

class CreateParents < ActiveRecord::Migration   
  def change
    create_table :parents do |t|

      # the id column is created automatically.
      t.string :name
    end
  end
end

<强>分贝/迁移/ [时间戳] _create_children.rb

class CreateChildren < ActiveRecord::Migration   
  def change
    create_table :children do |t|

      # this creates a column `parent_id` with a foreign key for enforcing
      # validity at the database level and an index for faster searching.
      t.references :parent, foreign_key: true, index: true

      t.string :name
    end
  end
end

您需要associate这两个模型,以便Rails可以找到合在一起的记录。

应用/模型/ parent.rb

class Parent < ActiveRecord::Base

  ...

  has_many :children

  ...
end

应用/模型/ child.rb

class Child < ActiveRecord::Base

  ...

  belongs_to :parent

  ...
end

现在,我不太确定你在控制器动作中的意思。首先,你可以写:

应用/控制器/ static_pages_controller.rb

class StaticPagesController < ApplicationController

  def table
    @children = Child.all.order('name ASC')
  end
end

确保此控制器操作有route。然后你的观点(下面稍作修正)应该有效,除了这个ticker属性。这是你在数据库表中定义的东西吗?

应用/视图/ static_pages / table.html.erb

<table>
    <% @children.each do |child| %>
        <tr>
            <td><%= link_to child.name, child_path(child) %></td>
            <td><%= child.ticker %></td> // as long as this attribute is defined, I believe it should work.
            <td><%= link_to child.parent.name, parent_path(child.parent) %></td>
        </tr>
    <% end %>
</table>