2016-10-10 16 views
0

當通過Ajax替換部分時,一種方法給了我正確的結果,但另一種(幾乎相同)不是。我想選擇和取消選擇特定廣告系列的羣組。選擇給了我一個直接的替代品,取消不了。在Rails 4中用AJAX替換部分:undefined方法`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

完美,謝謝! –

相關問題