单个数据库条目轨道的多个文本字段3

时间:2011-04-02 20:32:32

标签: ruby-on-rails database ruby-on-rails-3 forms

在我正在构建的应用程序中,我需要将多个文本字段组合到一个数据库列中。

例如,我的“商家”条目有一栏“折扣”

我希望阅读的文字字段如下:

<%= f.text_field :discount %> % Off <%= f.text_field :discount %>.  

我希望将这两者作为字符串输入数据库:“10%Off Shoes”(或其他)。

有没有办法在Rails 3中执行此操作?

谢谢!

**编辑!

我尝试了Pan Thomakos的解决方案(使用虚拟属性),现在我收到以下错误:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.split
Extracted source (around line #3):

1: 
2: <%= f.label :cost %><br />
3: <%= f.text_field :percentage %> % Off <%= f.text_field :product %>.


app/models/business.rb:11:in `percentage'

我不确定如何处理这个问题!不可否认,当我在模型中工作时,我很弱,我可能会在控制器中处理这个问题。

谢谢!

2 个答案:

答案 0 :(得分:4)

是的,最好的方法是使用虚拟属性。每个虚拟属性将跟踪折扣的不同部分,折扣将是组合字段。以下是我将如何实现它:

class Business
  attr_writer :percentage, :product

  before_save :create_discount

  def percentage
    @percentage.nil? ? discount.to_s.split('% Off ').first : @percentage
  end

  def product
    @product.nil? ? discount.to_s.split('% Off ').last : @product
  end

  protected

  def create_discount
    discount = "#{@percentage}% Off #{@product}" unless @product.nil? || @percentage.nil?
  end
end

然后,您可以将视图修改为:

<%= f.text_field :percentage %> % Off <%= f.text_field :product %>.

答案 1 :(得分:0)

切换逻辑。

class Business

  attr_writer :percentage, :product

  before_save :create_discount

  def percentage
    @percentage.nil? ? @percentage : discount.to_s.split('% Off ').first 
  end

  def product
    @product.nil? ? @product : discount.to_s.split('% Off ').last 
  end

  protected

  def create_discount
    discount = "#{@percentage}% Off #{@product}" unless @product.nil? || @percentage.nil?
  end
end