Railsアプリケーションでは、会社に所属するキャンペーンがあります。同社には多くのグループがあり、それらのグループの1つまたは複数は、:general_connections
というモデルを通じてキャンペーンに接続できます。check_box_tagを使用してRailsでhas_many-troughの関連付けを作成または破棄する方法
このキャンペーンでは、関連する会社のグループの一覧(チェックボックス付き)を表示しようとしています。チェックボックスをオンにすると: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
コントローラ:form_tagと
#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
ビュー:
<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
で私の試みは、おそらくゴミであると信じていますが、私はちょうどしたかったですまず自分で試してみてください。
私の質問は以下のとおりです。
- がこのさえ可能ですか?
- もしそうなら、私はこれをどのように構成できますか?
更新:
<%= 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
に行を追加するかどうかはわかりません:
はジェフの答え@でテストを行いました。
あなたの答え、@ Jeffありがとう。私はそれを変換しようとしました。それは私に何のエラーも与えていませんが、私に 'チェックボックス'を表示していません。どの形式の 'form method'(' form_tag'や 'form_for')を使うのか分かりません:どうすれば' submit'するのですか? –
私は、フォームヘッダーと送信ボタンを含め、残りのコードを追加しました。チェックボックスが表示されない場合は、考えられる原因が10個あります。最初に気になるのは、開発データベースにまだ企業がいないということです。 –
もう一度@Jeffに感謝します。ソリューションのテストで質問を更新しました。まだ「チェックボックス」は表示されません。会社は問題ではないようです。 –