在我的Rails应用程序中,我有一个属于公司的广告系列。该公司有许多组,其中一个或多个组可以通过名为:general_connections
的模型连接到该活动。
对于此广告系列,我尝试显示关联公司的组列表(带复选框)。选中一个复选框即可创建:general_connection
,并取消选中该复选框,此特定:general_connection
应为destroyed
。
型号:
class Company < ActiveRecord::Base
has_many :campaigns
has_many :groups
end
class Campaign < ActiveRecord::Base
belongs_to :company
has_many :general_connections
has_many :groups, through: :general_connections
end
class Group < ActiveRecord::Base
belongs_to :company
has_many :general_connections
has_many :campaigns, through: :general_connections
end
class GeneralConnection < ActiveRecord::Base
belongs_to :campaign
belongs_to :group
belongs_to :company
end
控制器:
#campaign_controller.rb /show
def show
@campaign = Campaign.find(params[:id])
@company = Company.find(current_user.current_company)
@main_groups = @company.groups
@general_connections = @campaign.general_connections
@groups = @campaign.groups
end
#general_connection_controller.rb /connect_group_to_campaign
def connect_group_to_campaign
group = group.find(params[:group_id])
@campaign = Campaign.find(params[:id])
@campaign.general_connections.create(group: group)
redirect_to :back
end
#general_connection_controller.rb /disconnect_group_from_campaign
def disconnect_group_from_campaign
@general_connection = GeneralConnection.where("group_id = ? AND campaign_id = ?", params[:group_id], @campaign.id).first
group = @general_connection.oneliner
@general_connection.destroy
redirect_to :back
end
使用form_tag查看:
<h5>Groups for this campaign</h5>
<div class="row">
<% @main_groups.each do |group| %>
<%= form_tag connect_group_to_campaign_path do |f| %>
<%= hidden_field_tag 'campaign_id', @campaign.id %>
<%= f.check_box_tag group.id, group.id, true %>
<% end %>
<%= form_tag disconnect_group_from_campaign_path do |f| %>
<%= hidden_field_tag 'campaign_id', @campaign.id %>
<%= f.check_box_tag group.id, group.id, false %>
<% end %>
<% end %>
</div>
我相信我在View
的尝试可能很垃圾,但我只想先自己尝试一下。
我的问题是:
更新
是否对@ Jeff的答案进行了测试:
<%= form_for @campaign do |f| %>
<div class="form-group">
<ul>
<% @main_groups.each do |group| %>
<li>
<%= check_box_tag :group_id, group.id, @campaign.general_connections.include?(group) %>
<%= group.title %>
</li>
<% end %>
</ul>
</div>
<div class="actions">
<%= f.submit "Save groups", class: "btn waves-effect waves-light" %>
</div>
<% end %>
但是没有显示checkboxes
,我不确定这会如何为我的general_connections table
添加一行。
答案 0 :(得分:0)
我最近完成了一个与你描述的非常相似的功能。这里的代码对我来说证明是成功的,尽管它可能需要根据您的需求进行重大调整:
<%= form_for(@assignment) do |a| %>
<%= a.label :name %>
<%= a.text_field :name, class: 'form-control' %>
<%= a.label :possible, "Points Possible" %>
<%= a.text_field :possible, class: 'form-control' %>
<%= a.label :priority %>
<%= a.select(:priority, [0,1,2,3], :selected =>[2]) %>
<% Assignment.each do |assignment| %>
<%= check_box_tag :preassign_ids, assignment.id,
@assignment.preconditions.include?(assignment), :name => 'assignment[preassign_ids][]' %>
<%= assignment.name %>
<% end %>
<%= a.submit "Submit", class: "btn btn-primary" %>
<% end %>
此示例使用两种模型:第一种,&#34;分配&#34 ;;第二,一个名为的连接模型,&#34; Preconditions&#34;在分配之间创建关系。 Preconditions表包含两列:&#34; mainassign&#34;并且&#34;预先分配。&#34;这就是:preassign_ids发挥作用的地方。您需要与应用中的关联进行类似的工作。
在此代码中,单击复选框可创建将当前分配链接到另一个分配的前提条件。我还没有通过取消选中复选框来测试关系是否被破坏,但第一部分工作正常。
我自己很新,所以我不知道我的其他文件中的代码是否有用。如果您认为这种方法是您正在寻找的方法,我很乐意发布更多内容。