我是铁路的相对新手。我有一个运行和完成状态的进程(五种可能的不同状态)。该过程按建筑物运行。 (我们从建筑物收集数据。)我试图允许用户自己配置以接收具有细粒度控制的通知电子邮件:按建筑物和完成状态。我尝试使用collection_check_boxes创建一个供用户选择的复选框表,但我甚至不确定collection_check_boxes是否针对这种情况而设计。我很高兴听到这个问题的肯定或否定。
我有以下模块:
class Building < ActiveRecord::Base
self.primary_key = 'building_id'
has_many :etl_status
has_many :email_notifications
end
class BuildingUserPair < ActiveRecord::Base
self.primary_key = "building_user_pairs_id"
belongs_to :building
belongs_to :user
has_many :email_notification_settings
end
class EmailNotificationSetting < ActiveRecord::Base
self.primary_key = "email_notification_settings_id"
belongs_to :building_user_pair
end
class EtlResult < ActiveRecord::Base
self.primary_key = 'etl_results_id'
# table has 5 rows, with values 1 -5 with the statuses "HUNKY DORY", "MO BETTA", "LIMPING ALONG", "DISMAIL FAILURE" and "UNEXPECTEDLY IDLE"
end
class EtlResultNotification < ActiveRecord::Base
belongs_to :building
belongs_to :user
end
class EtlStatus < ActiveRecord::Base
self.primary_key = 'etl_status_id'
belongs_to :building
has_many :users, :through => :email_notifications
end
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@buildings = Building.active
@bup = []
@email_notifications_settings = []
@buildings.each do |bldg|
bup = BuildingUserPair.where(user_id: params[:id], building_id: bldg.building_id).first_or_create
@email_notifications_settings[bldg.building_id] =
EmailNotificationSetting.where(building_user_pairs_id: bup.building_user_pairs_id).all
end
end
my users/show.html.erb contains this:
<%= form_for @user do |f| %>
<% @buildings.each do |bldg| %>
<div class="row">
<div class="col-md-4">
<%= bldg.name %>
</div>
<%= f.fields_for :email_notification_settings do |ens| %>
<%= ens.collection_check_boxes( @email_notifications_settings[bldg.building_id],
EtlResult.all, :etl_result_id, :result_name) %>
</div>
<% end %>
<% end %>
<div class="form-buttons">
<%= submit_tag("Update", data: { buildings: @buildings}) %>
</div>
除此之外,etl_result_notification表只有两列 它的主键,构建用户对列,然后是数字, 1-5是Etl Results表的外键。因此,这个想法是新的一条线 为复选框创建,如果未选中复选框,则删除表中的行。 就像我说的那样,甚至不确定form_for和collection_check_boxes是否设计成这样做。
我的问题是复选框未正确初始化。他们都没有受到控制。 我猜我需要将其他的paraemters传递给collection_check_boxes,但我无法思考 他们应该是什么。
TIA
答案 0 :(得分:1)
我认为你的问题太复杂了, 你想要做的是保存一个id列表,该列表前进到用户想要获取的电子邮件。
Rubyist发布https://stackoverflow.com/a/23340368/1380867女巫是你想要做的一个很好的例子。
你应该创建一个serialize :email_notification_ids
#MODEL
class User < ActiveRecord::Base
serialize :email_notification_ids
end
希望这会有所帮助 快乐的Codding