Ajaxを部分的に置き換えると、正しい結果が得られますが、もう一方(ほぼ同じ)は正しくありません。特定のキャンペーンのグループを選択して選択を解除する必要があります。選択は私に直接の交換を与え、選択を解除することはできません。AjaxをRails 4に置き換える:定義されていないメソッド `id`
モデル/ general_connection.rb
belongs_to :campaign
belongs_to :group
モデル/ group.rb
has_many :general_connections
has_many :campaigns, through: :general_connections
モデル/ campaign.rb
has_many :general_connections
has_many :groups, through: :general_connections
のコントローラ/ general_connection.rb
def connect_group_to_campaign
@group = Group.find(params[:group_id])
@campaign = Campaign.find(params[:campaign_id])
@campaign.general_connections.create(group: @group)
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
def disconnect_group_from_campaign
@general_connection = GeneralConnection.where("group_id = ? AND campaign_id = ?", params[:group_id], params[:campaign_id]).first
@group = @general_connection.group
@general_connection.destroy
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
ビュー/キャンペーン/ show.html.erb
<div class="row">
<% @main_groups.each do |group| %>
<%= render partial: 'groups_form', locals: { group: group } %>
<% end %>
</div>
*ビュー/キャンペーン/ _groups_form.html.erb
<div class="row" id="group_<%= group.id %>">
<div class="col m6">
<div class="valign-wrapper black-text">
<% if group.icon.nil? %>
<i class="material-icons">group</i>
<% else %>
<i class="material-icons"><%= group.icon %></i>
<% end %>
 <%= group.title %>
</div>
</div>
<div class="col m6">
<% if !grouped(group) %>
<%= form_tag connect_group_to_campaign_path(:group_id => group.id, :campaign_id => @campaign.id), remote: true do %>
<%= button_tag 'check_box_outline_blank', class: "secondary-content material-icons grey-text", style: "background-color:white;border:none;" %>
<% end %>
<% else %>
<%= form_tag disconnect_group_from_campaign_path(:group_id => group.id, :campaign_id => @campaign.id), remote: true do %>
<%= button_tag 'check_box', class: "secondary-content material-icons grey-text", style: "background-color:white;border:none;" %>
<% end %>
<% end %>
</div>
</div>
views/general_connection/connect_group_to_campaign.js.erb
$('#group_<%= @group.id %>').replaceWith('<%= j render partial: 'campaigns/groups_form', locals: {group: @group} %>');
ビュー/ general_connection/disconnect_group_from_campaign.js.erb
$('#group_<%= @group.id %>').replaceWith('<%= j render partial: 'campaigns/groups_form', locals: {group: @group} %>');
...そしてこれは私が取得していますエラーです:
ActionView::Template::Error (undefined method `id' for nil:NilClass):
12: </div>
13: <div class="col m6">
14: <% if !grouped(group) %>
15: <%= form_tag connect_group_to_campaign_path(:group_id => group.id, :campaign_id => @campaign.id), remote: true do %>
16: <%= button_tag 'check_box_outline_blank', class: "secondary-content material-icons grey-text", style: "background-color:white;border:none;" %>
17: <% end %>
18: <% else %>
がそれを合計しますup:両方のメソッドが動作していますが、connect_group_to_campaign
は直接的な結果を返し、disconnect_group_from_campaign
はブラウザの更新を必要としません。
誰でもお手伝いできますか?
完璧、ありがとう! –