Rails将DB列中的虚拟属性保存为数组

时间:2016-03-29 12:42:19

标签: ruby-on-rails-4

构建我的应用程序的方式我认为这是处理这些非模型属性的最佳方法。我有一堆输入,我想在我的数据库中保存为一个数组,但我不确定如何做到这一点。我知道我必须将params传递给控制器​​中的create动作。

_form.html.erb

<% @product_sizes_array.each do |ps| %>
  <%= text_field_tag ps %>
<% end %>

我的创作动作应该如何?

Orders_controller.rb

def new
  @product_sizes_array = ['S', 'M', 'L', 'XL', '2XL']
end
def create
  @order = Order.new(order_params)
  if @order.save
    redirect_to edit_order_path(@order), notice: 'Order was successfully created.'
  else
    render action: 'new'
  end
end

1 个答案:

答案 0 :(得分:0)

所以我不确定你要在这里完成什么,所以我不得不做一些假设。现在我假设客户下了一个订单,而且每个尺码的文本框都是您要订购的尺寸的数量。

class Order < ActiveRecord::Base
  has_many :items
  #id
end

#An ordered item, order specific
class Order::Item < ActiveRecord::Base
  belongs_to :item, class_name: '::Item'
  #id
  #order_id => points to the order this item belongs to
  #item_id => points to Item
  #size_id => points to an index in the array of sizes
  #value => number of items ordered

  def size
    self.class.int_to_size(self.size_id)
  end

  def self.int_to_size size_id
    ::Item::PRODUCT_SIZES[size_id]
  end

  def self.string_to_size_index name
    ::Item::PRODUCT_SIZES.index{|s| s == name }
  end
end

#Individual item, not size specific
class Item < ActiveRecord::Base
  PRODUCT_SIZES = ['S', 'M', 'L', 'XL', '2XL']
  #id
  #name
  #price
end

所以它的工作方式是用户提交一个大小数组,对应于他们想要的每个大小的数量。您创建一个订单,然后在Order :: Item中插入当前的order_id,所选的item_id,它相应的大小,以及他们想要的那个大小。