2016-09-07 31 views
0
ActionView::Template::Error (undefined method `map' for :id:Symbol): 
    1: <div id="dropdown-no-2"> 
    2: <%= collection_select 'challenge_id', challenges, :id, :full_challenge, include_blank: true %>. 
    3: </div> 

如何解決此錯誤,以便僅列出相應用戶的挑戰?未定義的方法`map'用於:id:符號

決鬥/ _dueler_fields.html.erb

<%= f.select :user_id, User.order(:name).map { |user| [user.full_name, user.id] }, include_blank: true, id: "change-challenge-options" %> 

    will 

<%= render :partial => 'user_challenges', locals: {challenges: Challenge.order(:created_at)} %> 

<script> 
$("#change-challenge-options").change(function() { 
    $.ajax({ 
     type: "GET", 
     url: '<%= user_challenges_path %>', 
     data: {name: $('#change-challenge-options').prop('value')} 
    }); 
}); 
</script> 

決鬥/ _user_challenges.html.erb

<div id="dropdown-no-2"> 
    <%= collection_select(':challenge_id', challenges, :id, :full_challenge, include_blank: true) %>. 
</div> 

決鬥/ user_challenges.html.erb

$("#dropdown-no-2").html('<%=j render :partial => "user_challenges", locals: {challenges: @challenges} %>'); 

duels_controller.rb

def user_challenges 
    @user = User.find(params[:id]) 
    @challenges = @user.challenges.order(:created_at) 
    end 

    def new 
    @duel = Duel.new 
    @duel.duelers << Dueler.new(user_id: current_user.id, user_name: current_user.name, user_last_name: current_user.last_name) 
    respond_with(@duel) 
    end 

的routes.rb

get 'duels/user_challenges', :to => 'duels#user_challenges', as: 'user_challenges' 

回答

1

更改爲:

<%= collection_select(:duel, :challenge_id, challenges, :id, :full_challenge, include_blank: true) %> 

參考collection_select

+0

謝謝!我將':duel'改爲':dueler',因爲':dueler'有'challenge_id'列。這消除了錯誤,但如果你願意協助,我仍然在爲這個問題爭取更大的目標:http://stackoverflow.com/questions/39349262/how-to-only-show-dropdown-options -for-user/39350351#39350351 :) –