Cześć,
Mam taki oto formularz.
Z takim oto straszącym kodem:
[code=ruby]
app_menu.html.erb
<%= form_for :subscription do |f| %>
-
<%= check_box_tag app.id, current_user.access?(app) %><%= app.name %>
<% @apps.each do |app| %>
<% end %>
<%= f.submit %>
<% end %>
<% end %>
#kontroler
def app_menu
@apps = App.all
if request.post?
if params[:subscription] and params[:subscription][:app_id]
params[:subscription][:app_id].each do |app_id|
Subscription.create_unique({user_id: current_user.id, app_id: app_id, verified: true, approved:true})
end
redirect_to root_path
end
end
end
@subscriptions = current_user.subscriptions
Relacje
App
has_many :subscriptions
has_many :users, through: :subscriptions
User
belongs_to :app
has_many :subscriptions, :dependent => :destroy
Subscription
belongs_to :user
belongs_to :app[/code]
Problem jest taki: Jak sprawdzić, które pola zostały odznaczone i usunąć dla nich Subskrypcję(app). Muszę wykonać na odznaczonych aplikacjach: Feed.remove_app_items(app)
No i oczywiście być może da się to trochę zrefaktorować.
EDIT:
Narazie, mam coś takiego:
def app_menu
@apps = App.all
if request.post?
if params[:subscription] and params[:subscription][:app_id]
params[:subscription][:app_id].each do |app_id|
Subscription.create_unique({user_id: current_user.id, app_id: app_id, verified: true, approved:true})
@apps.reject!{|app| app.id == app_id.to_i}
end
@apps.each do |app|
Subscription.where("user_id = #{current_user.id} AND app_id = #{app.id}").delete_all
end
current_user.reload
redirect_to root_path
end
end
@subscriptions = current_user.subscriptions
end
Ale w przypadku kiedy odznaczone wszystkie applikacje(App) jak widać nic się nie dzieje.
Jak w takim przypadku to zrefaktorować?