在我正在构建的应用程序中,我需要将多个文本字段组合到一个数据库列中。
例如,我的“商家”条目有一栏“折扣”
我希望阅读的文字字段如下:
<%= 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'
我不确定如何处理这个问题!不可否认,当我在模型中工作时,我很弱,我可能会在控制器中处理这个问题。
谢谢!
答案 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