несколько текстовых полей для одной базы данных рельсы 3 - PullRequest
1 голос
/ 03 апреля 2011

В приложении, которое я создаю, мне нужно объединить несколько текстовых полей в один столбец базы данных.

Например, моя запись "Бизнес" содержит столбец "Скидка"

текстовое поле Я хочу прочитать что-то вроде этого:

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

Я хочу, чтобы оба из них были введены в базу данных в виде строки: "10% Off Shoes" (или что-то еще).

Есть ли способ сделать это в Rails 3?

Спасибо!

** Редактировать!

Я попробовал решение Пана Томакоса (используя виртуальные атрибуты) и теперь яполучаю следующую ошибку:

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 ]

4 голосов
/ 03 апреля 2011

Да, лучший способ сделать это - использовать виртуальные атрибуты.Каждый виртуальный атрибут будет отслеживать различные части скидки, и скидка будет объединенным полем.Вот как я бы это реализовал:

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 %>.
0 голосов
/ 04 апреля 2011

Переключить логику.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...