Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить все атрибуты, как 
:(
    Опции темы
rax
Дата 19.10.2010, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 4.6.2004
Где: Егорьевск

Репутация: нет
Всего: 1



Доброго дня

Полазил по документации и гуглу, ничего не нашел
Есть ActiveRecord объект, в котором заполнены некоторые атрибуты, а некоторые не заполнены
Объект записывается в сессию и на следующем шаге сервиса добавляются новые данные, и на последнем шаге делается save
Есть функция update у массивов, вот примерно тоже самое мне нужно сделать для атрибутов ActiveRecord
можно ли?

Спасибо
PM MAIL WWW ICQ AOL YIM MSN   Вверх
shine
Дата 19.10.2010, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 137
Регистрация: 20.10.2006

Репутация: 3
Всего: 5



Функция update есть у хэшей а не у массивов. Для ActiveRecord update_atributes подойдет?
--------------------
An investment in knowledge always pays the best interest. © Benjamin Franklin
PM MAIL   Вверх
rax
Дата 19.10.2010, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 4.6.2004
Где: Егорьевск

Репутация: нет
Всего: 1



Да, у хэшей. 
Насколько я знаю update_atributes будет пытаться занести значения в базу и спотыкнется, потому что в моем случае атрибута id еще нет
Мне же нужно все сделать лишь на уровне параметров класса 

Это сообщение отредактировал(а) rax - 19.10.2010, 18:13
PM MAIL WWW ICQ AOL YIM MSN   Вверх
solenko
Дата 19.10.2010, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 1
Всего: 67



Стандартной такой не знаюю, но! Это же ruby )
Код

module ActiveRecord
  class Base
     def write_attributes(attr_hash)
        attr_hash.each { |name, value|
           write_attribute(name, value)
        }
     end
  end
end


obj = MyModel.new
obj.write_attributes(:attr1 => 'val1', :attr2 => 'val2')



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
rax
Дата 20.10.2010, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 4.6.2004
Где: Егорьевск

Репутация: нет
Всего: 1



Так оно понятно, что если атрибуты уже есть в хэше, то обновить объект не составит труда.
Вся фигня в том, как атрибуты перегнать в хэш, при условии что количество этих атрибутов нам неизвестно и нет возможности сделать это вручную, как у вас в 13-ой строке
PM MAIL WWW ICQ AOL YIM MSN   Вверх
solenko
Дата 20.10.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 1
Всего: 67



Код

<form>
<input type="text" name="object[attr1]" value="val1" />
<input type="text" name="object[attr2]" value="val2" />
</form>


Код

obj = MyModel.new
obj.write_attributes(params[:object])



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
source777
Дата 20.10.2010, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(solenko @  19.10.2010,  18:26 Найти цитируемый пост)
Стандартной такой не знаюю, но! Это же ruby )

Не правильно, это же Rails, надо читать код. Вот, кстати:
Код

      def update_attributes(attributes)
        self.attributes = attributes
        save
      end

Ни на какие мысли не наводит?

Зачем огород городить, когда всё проще некуда "из коробки"

Код

obj = MyModel.new
obj.attributes = {:attr1 => 'val1', :attr2 => 'val2'}
# или
obj.attributes = params[:object]




Цитата(rax @  19.10.2010,  15:58 Найти цитируемый пост)
Есть ActiveRecord объект, в котором заполнены некоторые атрибуты, а некоторые не заполнены
Объект записывается в сессию и на следующем шаге сервиса добавляются новые данные, и на последнем шаге делается save

Зачем так извращаться? В сессию объекты записывать - это вообще ни в какие ворота. Создай сразу объект в БД и заполняй аттрибуты сколько влезет.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
solenko
Дата 21.10.2010, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 1
Всего: 67



Цитата(source777 @  20.10.2010,  18:59 Найти цитируемый пост)
Ни на какие мысли не наводит?

Код

obj = MyModel.new
obj.attributes = {:attr1 => 'val1', :attr2 => 'val2'}
# или
obj.attributes = params[:object]

Наводит на мысль, что на втором шаге прийдется делать как минимум
obj.attributes.merge!(params[:object])

Ну и на мою write_attributes, скорее всего прийдется навешивать еще вызов чего-то вроде valid_for_attributes?(*attrs)


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
source777
Дата 21.10.2010, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(solenko @  21.10.2010,  08:45 Найти цитируемый пост)
Наводит на мысль, что на втором шаге прийдется делать как минимум
obj.attributes.merge!(params[:object])

Ну и на мою write_attributes, скорее всего прийдется навешивать еще вызов чего-то вроде valid_for_attributes?(*attrs) 

Ну надо же, какой упорный велосипедостроитель... smile 
Какая религия тебе запрещает посмотреть на код метода ActiveRecord::Base#attributes=() ? 
Твой write_attributes до стандартного attributes= ещё пилить и пилить... вот только какой смысл?


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
rax
Дата 25.10.2010, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 4.6.2004
Где: Егорьевск

Репутация: нет
Всего: 1



Если человек забросит заполнение на первом шаге, в базе будет куча мусора
PM MAIL WWW ICQ AOL YIM MSN   Вверх
source777
Дата 25.10.2010, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 6
Всего: 56



Цитата(rax @  25.10.2010,  13:40 Найти цитируемый пост)
Если человек забросит заполнение на первом шаге, в базе будет куча мусора 

Ну это как сказать, многие считают очень ценной информацию о том на каком шаге пользователи забрасывают некий процесс, гораздо более ценной, чем лишние 5-10 Мб места в БД. Хотя если твой случай никак не связан с бизнесом, и пользователям не предоставляется возможность возобновить процесс заполнения(что в большинстве случаев будет багом юзабилити), то можно и не сохранять такие записи.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
rax
Дата 26.10.2010, 11:37 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 4.6.2004
Где: Егорьевск

Репутация: нет
Всего: 1



Разобрался. Есть @foo.attributes.keys и Foo.column_names. Дальше update
PM MAIL WWW ICQ AOL YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby: Общие вопросы"
source777
  • С чего начать? начинаем
  • Ссылки на полезные ресурсы смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0784 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.