Дата в текстовом поле с виртуальным атрибутом - PullRequest
1 голос
/ 04 января 2012

Я уже задавал подобный вопрос по этому вопросу, однако, увидев Railscast об использовании текстовых полей - Райан рекомендует использовать виртуальный атрибут.

Я настроил свою модель с виртуальным атрибутом так:

attr_accessible :title, :description, :start, :start_string

def start_string
  unless start.nil?
    start.to_s(:db)
  end
end

def start_string(start_str)
  self.start = Date.parse(start_str)
rescue ArgumentError
  @start_invalid = true
end

def validate
  errors.add(:start, "is invalid") if @start_invalid
end

Я включил это в свой вид редактирования так:

    <div class="field">
        <%= f.label :start_string %> <br />
        <%= f.text_field :start_string %>
        <%#= f.date_select(:start, :order => [:month, :day, :year], :end_year => Time.now.year + 10) %>
    </div>

Однако при загрузке формы редактирования я получаю сообщение об ошибке

    wrong number of arguments (0 for 1)

Я также знаюЭто очень старый Railscast, и кто-то комментирует событие:

«Как сказал Рейн, если вы добавите nil? check в метод getter, все должно получиться нормально!»

Нет.Код устарел для использования сегодня.Есть более эффективные способы сделать это сейчас

Итак, как правильно сделать это сейчас?Похоже, простой и прямой способ сделать это ... если бы я не получил ошибку!

1 Ответ

1 голос
/ 04 января 2012

Ваш второй метод должен быть def start_string=(start_str) (вам не хватает знака равенства).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...