2016-10-10 8 views
0

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 %> 
       &nbsp;&nbsp<%= 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はブラウザの更新を必要としません。

誰でもお手伝いできますか?

答えて

0

@campaignのオブジェクトはdisconnect_group_from_campaignメソッドで宣言されていないようです。 disconnect_group_from_campaignメソッドの下の行を追加してからお試しください

@campaign = Campaign.find(params[:campaign_id]) 
+0

完璧、ありがとう! –

関連する問題