【发布时间】:2012-11-06 18:14:32
【问题描述】:
我有以下订阅创建系统,现在当我选择可用订阅组(营销、销售)时,Save Subscription 创建这两个订阅:
@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, approved: true})
end
redirect_to root_path
end
end
@subscriptions = current_user.subscriptions
所以我只能添加新的Subscriptions(在这个特定的例子中我只能添加Engineering)
如何重构该操作,以便能够通过取消选中订阅组来销毁订阅组(例如,我想从营销组取消订阅)?
因此,当我选择 Marketing 和 Engineering 时,params[:subscription][:app_id] 将等于 [marketing.id, engineering.id]
# app_menu.html.erb
<%= form_for :subscription do |f| %> # this form goes to app_menu action above
<ul>
<% @apps.each do |app| %>
<li>
<%= check_box_tag app.id, current_user.access?(app) %><span><%= app.name %></span>
</li>
<% end %>
</ul>
<%= f.submit %>
<% end %>
<% end %>
关系:
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
def self.create_unique(p)
s = Subscription.find :first, :conditions => ['user_id = ? AND app_id = ?', p[:user_id], p[:app_id]]
Subscription.create(p) if !s
end
架构
# == Schema Information
#
# Table name: subscriptions
#
# admin :boolean
# app_id :integer
# created_at :datetime
# id :integer not null, primary key
# updated_at :datetime
# user_id :integer
#
# Table name: apps
#
# created_at :datetime
# id :integer not null, primary key
# name :string(255)
# updated_at :datetime
# user_id :integer
#
# Table name: users
#
# app_id :integer
# created_at :datetime
# id :integer not null, primary key
# updated_at :datetime
所以问题是如何找到哪些应用程序未被选中?
然后删除他们的订阅并使用Feed.app_destroy_items(app)删除Feed
【问题讨论】:
-
您需要显示更多代码。 (1) 创建复选框的视图代码。 (2) 订阅查看表&
params[:subscription] -
只添加表单代码就够了吗?
-
您需要添加模型以及关系是什么。看起来你有
User和App和Subscription,这些有什么关系? -
刚刚添加了关系和更多操作代码。
-
好吧,根据您所展示的内容,我想我已经为您找到了答案(如下)。试试看会发生什么。
标签: ruby-on-rails ruby-on-rails-3 model-view-controller