Как извлечь все атрибуты из параметров без использования вложенного хэша? - PullRequest
0 голосов
/ 27 ноября 2011

В настоящее время я делаю свое первое приложение для iPhone с моим другом. Он кодирует интерфейс, а я - в Rails. Дело в том, что он пытается отправить мне необходимые атрибуты с помощью пост-запроса, но без использования вложенного хэша, а это означает, что все атрибуты будут напрямую вставлены в параметры, а не в «хеш». Поэтому, в частности, я хочу получить все эти атрибуты, возможно, с помощью некоторого метода params. Я знаю, что params по умолчанию содержит другую информацию, которая для меня неактуальна, например params [: controller] и т. Д. Я назвал все атрибуты такими же, как атрибуты модели, поэтому я думаю, что их можно будет легко передать, По крайней мере, это было возможно в php, так что я надеюсь, что у Rails также есть простой способ сделать это.

Так, например, вместо использования User.new (params [: user]) в контроллере, у меня есть атрибуты пользователя не во вложенных хэш-параметрах [: user], а непосредственно в params, так как я могу получить их все однажды? и поместите их в User.new ()?

Ответы [ 3 ]

1 голос
/ 28 ноября 2011

Я нашел решение своей проблемы.Я пропустил добавление attr_accessible в мою модель, которая изначально возвращала ошибку, когда я пытался запустить такой код: User.new (params), которому было передано несколько атрибутов с запросом post.

Решение былоочень просто, может быть, слишком просто, но так как это мое первое настоящее приложение в Rails, я чувствую, что оно может быть полезно для других новичков с похожими проблемами.

0 голосов
/ 27 ноября 2011

Вы можете получить доступные атрибуты из вновь созданного объекта с помощью метода attribute_names. Итак, в этом особом примере:

u = User.create
u.attributes = params.reject { |key,value| !u.attribute_names.include?(key)
u.save
0 голосов
/ 27 ноября 2011

Если вы хотите просто передать более ограниченную версию params новой, вы должны сделать что-то вроде следующего:

params = { item1: 'value1', item2: 'value2', item3: 'value3' }
params.delete(:item2)
params # will now be {:item1=>"value1", :item3=>"value3"} 

Также см. this для объяснения использования, за исключением того, что вы упоминаете в своем комментарии. Примером исключения является что-то вроде:

params.except(:ssn, :controller, :action, :middle_name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...