class TalkPreferencesController < ApplicationController def index @talks = Talk.find(:all, from: :halfnarp_friendly, params: {locale: I18n.locale}).to_a.shuffle(random: Random.new(sort_seed)) end def show @talk_preference = TalkPreference.find_by hashed_unique_id: params[:id] render json: {talk_ids: @talk_preference.talks} end def create @talk_preference = TalkPreference.new talk_preference_params @talk_preference.ip_address = current_ip_address if @talk_preference.save render json: { update_url: talk_preference_url(@talk_preference), hashed_uid: @talk_preference.hashed_unique_id, uid: @talk_preference.id }, status: :created else render status: :unprocessable_entity end end def update @talk_preference = TalkPreference.find params[:id] @talk_preference.with_lock do SelectedTalk.where(talk_preference_id: @talk_preference.id).delete_all if params[:talk_preference].blank? || @talk_preference.update(talk_preference_params) render json: { update_url: talk_preference_url(@talk_preference), hashed_uid: @talk_preference.hashed_unique_id, uid: @talk_preference.id } else head :unprocessable_entity raise ActiveRecord::Rollback end end end private def talk_preference_params params.require(:talk_preference).permit(selected_talks_attributes: [:talk_id]) end end