创建动态表:Attributes = Columns,Nested Attributes = Rows

时间:2015-01-30 18:31:05

标签: ruby-on-rails ruby html-table multiple-columns

行&专栏,宝贝。行&列。

在一个表格中:

当用户添加新名称& :metric我希望它创建一个新列。

当用户添加新的:result_value& :date_value我希望它创建一个新行。

enter image description here

这是我目前的表格:

enter image description here

对于我的生活,我无法弄清楚为什么看似如此基本的东西如此困难。我不知道我是否想在数据库,模型,帮助器或索引视图中创建行和列和/或我是否应该使用其他语言或gem来帮助我。任何方向都会非常感激,因为十几个谷歌搜索还没有为我做过。

我在数据库中使用add_column还是什么?

class CreateQuantifieds < ActiveRecord::Migration
  def change
    create_table :quantifieds do |t|
      t.string :categories
      t.string :name
      t.string :metric

      t.timestamps null: false
    end
  end
end

或者我是否通过模型添加列?

class Quantified < ActiveRecord::Base
    belongs_to :user
    has_many :results #correct
    accepts_nested_attributes_for :results, :reject_if => :all_blank, :allow_destroy => true #correct
    scope :averaged,  -> { where(categories: 'averaged') }
    scope :instance,  -> { where(categories: 'instance') }

    CATEGORIES = ['averaged', 'instance']

end

class Result < ActiveRecord::Base
    belongs_to :user
  belongs_to :quantified
end

或者我一直在玩索引视图我已经尝试了各种各样的标签和html标签,但我永远无法让代码看起来像上面那样,这就是为什么我认为答案可能更深层次。< / p>

<!-- Default bootstrap panel contents -->

<div id="values" class="panel panel-default">

  <div class="panel-heading"><h4><b>AVERAGE</b></h4></div>

<table>
  <% @averaged_quantifieds.each do |averaged| %>
    <% if averaged.user == current_user %>     
      <th><%= averaged.name %> (<%= averaged.metric %>)</th>
      <td><% averaged.results.each do |result| %>
        <tr><td><%= result.date_value.strftime("%m-%Y") %></td>
        <td><%= result.result_value %></td></tr>
    <% end %></td>
  <% end %>
  <% end %>
</table>
</div>

<br>
<br>
<br>
<br>

<!-- Default bootstrap panel contents -->
<div id="values" class="panel panel-default">

  <div class="panel-heading"><h4><b>INSTANCE</b></h4></div>

<table>
  <% @instance_quantifieds.each do |instance| %>
    <% if instance.user == current_user %>     
      <th><%= instance.name %> (<%= instance.metric %>)</th>
      <td><% instance.results.each do |instance| %>
        <tr><td><%= result.date_value.strftime("%m-%Y") %></td>
        <td><%= result.result_value %></td></tr>
    <% end %></td>
  <% end %>
  <% end %>
</table>
</div>

  <div class="values-button">
  <%= link_to new_quantified_path, class: 'btn'  do %>
  <b><span class="glyphicon glyphicon-plus"</span></b>
  <% end %>
  </div>

1 个答案:

答案 0 :(得分:1)

我认为您可能误解了数据库应该如何使用。

我认为您不希望实际的数据库表是动态的。相反,您应该设置两个表。一个用户,一个用于度量。然后,用户可以添加新指标。

# == Schema Information
# Table name: users
# id :integer
Class User < ActiveRecord::Base
  has_many :metrics
end

# == Schema Information
# Table name: metrics
# id :integer
# type :string
# result :string
# user_id :integer
Class Metric < ActiveRecord::Base
  belongs_to :user
end

这样,您可以根据需要创建任意数量的指标。您可以通过:user_id字段确定度量标准属于谁。

从头到脚阅读此内容应该有所帮助:http://guides.rubyonrails.org/association_basics.html