2012-02-23 4 views
1

Это вопрос по этому вопросу where's the appropriate place to handle writing the current_user.id to an object У меня есть следующая модель. Элемент, у которого есть активы. Я вхожу в using accepts_nested_attributes_for :assets.Как присвоить значение accepts_nested_attributes_for модели

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

Глядя в журнале Дева, я вижу здесь значение:

item[assets_attributes][10][asset] 

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

ТНХ

вот еще часть HTML (пункты -> 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> 

ответ

0

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

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

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

+0

Этот синтаксис обрабатывает значение id в этом случае? Я получаю сообщение об ошибке 'can not convert Symbol в Integer'; THX за помощь! пытаясь быстро забрать рельсы – timpone

1

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

Если у каждого актива должен быть элемент, то может быть более разумным полностью исключить идею владения пользователем из актива: вы всегда можете найти владеющего пользователя, запросив прикрепленный элемент, что-то вроде @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

Наша схема требует нескольких ассоциаций (т. е. может владеть предметом, а также иметь собственный ресурс отдельно и в разных контекстах для упрощения таких вещей, как групповое владение). Так как это правда, мы хотим, чтобы владение активами существовало отдельно от элемента. – timpone

Смежные вопросы