Как назначить значение для модели accepts_nested_attributes_for - PullRequest
1 голос
/ 23 февраля 2012

Это продолжение этого вопроса где подходящее место для обработки записи current_user.id в объект У меня есть следующая модель.Предмет, который имеет множество активов.Я using accepts_nested_attributes_for :assets в пункте.

Я бы хотел присвоить значение current_user.id каждому активу.Обычно я просто делаю @item.update_attributes(params[:item]), чтобы сохранить его.Существует ли простой однострочный способ установки user_id для каждого актива в этом сценарии?

Глядя в журнал разработки, я вижу здесь значение:

 item[assets_attributes][10][asset]

Должен ли я просто пройти через все это и установить значение user_id?

thx

вот еще несколько html (items -> menu_item; упущено выше для упрощения).Предлагаемый контроллер Sol'n ниже, похоже, не работает.Я в порядке с выполнением на уровне контроллера.Любая помощь приветствуется.

 <div class='image-row'>
    <input id="menu_item_assets_attributes_18_asset" name="menu_item[assets_attributes][18][asset]" type="file" />
    <input id="menu_item_assets_attributes_18_description" name="menu_item[assets_attributes][18][description]" size="30" type="text" />
    </div>
  <div class='image-row'>
    <input id="menu_item_assets_attributes_19_asset" name="menu_item[assets_attributes][19][asset]" type="file" />
    <input id="menu_item_assets_attributes_19_description" name="menu_item[assets_attributes][19][description]" size="30" type="text" />
   </div>
 <div class='image-row'>
     <a href="/images/371/5ea19b9cfa534f1c1f5457ebb149d4259a662f88_huntbch_original.jpg?1329917713"><img alt="D5cc413a1748fb43b0baa2e32e29b10ac2efda10_huntbch_thumb" src="/images/371/d5cc413a1748fb43b0baa2e32e29b10ac2efda10_huntbch_thumb.jpg?1329917713" /></a>
<div class='img-row-description'>
     <label for="menu_item_assets_attributes_20_description">Description</label>
     <input id="menu_item_assets_attributes_20_description" name="menu_item[assets_attributes][20][description]" size="60" type="text" value="here is my comment" />
     <label for="menu_item_assets_attributes_20_destroy">Destroy</label>
     <input name="menu_item[assets_attributes][20][_destroy]" type="hidden" value="0" /><input id="menu_item_assets_attributes_20__destroy" name="menu_item[assets_attributes][20][_destroy]" type="checkbox" value="1" />
  </div>

Ответы [ 2 ]

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

Этот ответ, вероятно, немного мутнее, чем ваш предыдущий.

Если у каждого актива должен быть элемент, то было бы разумнее полностью исключить идею владельца-пользователя из ресурса: вы всегда можете найти пользователя-владельца, запросив прикрепленный элемент, что-то вроде @asset.item.user. Однако, если пользователи могут владеть активами независимо от предметов, я не думаю, что это будет работать для вас.

Если активы всегда создаются вложенными способами для элементов, значение before_create для ресурса может присвоить желаемое значение. Примерно так в asset.rb:

before_create :assign_user

def assign_user
  self.user = self.item.user if self.item && self.item.user
end

Наконец, если вы просто хотите сделать это в контроллере, ответ Вольфганга действительно хорош и добавит user_id к каждому asset_attributes.

0 голосов
/ 23 февраля 2012

Как насчет перебора массива params и установки значения следующим образом:

params[:item][:assets_attributes].map! do |asset_params| 
  asset_params[:user_id] = current_user.id 
end

Теперь вы можете использовать update_attributes( params[:item] ), как и раньше.

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