FormHelper и Hash как модель - PullRequest
       0

FormHelper и Hash как модель

1 голос
/ 20 февраля 2012

Я пытаюсь использовать объект Hash, например, как модель ActiveRecord в FormHelper:

<% hash = { :some_key => 'some_value' } %>

<% fields_for "hash", hash do |f| %>

  <%= f.text_field :some_key %>

<% end %>

Насколько я знаю, он пытается вызвать: метод some_key для объекта hash.Я пытался переопределить метод 'send' для класса Hash, но безуспешно:

def send( symbol, args = [] )
  if self.has_key?( symbol )
    self[ symbol ]
  elsif self.has_key?( symbol.to_s )
    self[ symbol.to_s ]
  else
    super
  end
end

У вас есть какие-нибудь идеи, как я мог бы поиграть с этим?

Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 21 февраля 2012

Большое спасибо KL-7 за его предложение OpenStruct.Итак, если кому-то это нужно, я добавляю здесь полный рабочий пример.

class Model < ActiveRecord::Base

  HASH_ATTRIBUTE_DEFAULT = {
    :value => '',
    :selected => 0
  }

  serialize :hash_attribute, Hash

  def hash_attribute
    read_attribute( :hash_attribute ) || HASH_ATTRIBUTE_DEFAULT
  end

  def hash_attribute=( hash )
    write_attribute( :hash_attribute, hash ) unless hash.nil?
  end

end

А теперь пришло время OpenStruct:

<% fields_for "model[hash_attribute]", OpenStruct.new( @model.hash_attribute ) do |f| %>

  <%= f.text_field :value %>
  <%= f.check_box :selected %>

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