Предполагая, что ваша ссылка находится внутри цикла, например:
<% MyMusic.each.do |my_music| %>
Вы можете установить вид:
<%= link_to download_path(my_music_id: my_music.id), remote: true do %>
Download
<% end %>
И контроллер:
def download
@my_music = MyMusic.find(params[my_music_id])
@my_music.update_attributes(email: current_user.email)
send_data @my_music.download.read, filename: @my_music.download
end
Но это хранит для каждого my_music последнего пользователя, который его скачал. Если вы хотите сохранить, кто загрузил то, что вам нужно, чтобы создать таблицу соединения, например users_downloads со столбцами user_id и my_music_id, то установите правильные ассоциации.
Вот еще один способ. Промежуточные переменные не сохраняются.
Мы использовали это для дедупликации результатов из множества перекрывающихся запросов.
$input = array_map("unserialize", array_unique(array_map("serialize", $input)));
Легко читаемое решение, вероятно, не самое эффективное:
function arrayUnique($myArray){
if(!is_array($myArray))
return $myArray;
foreach ($myArray as &$myvalue){
$myvalue=serialize($myvalue);
}
$myArray=array_unique($myArray);
foreach ($myArray as &$myvalue){
$myvalue=unserialize($myvalue);
}
return $myArray;
}