2012-10-03 6 views
0

튜토리얼을 따라 가려고합니다. 여기 Twilio 전화 번호 검색 및 구매 -> http://www.twilio.com/docs/howto/search-and- buyNoMethodError : 정의되지 않은 메소드 'each'for nil : NilClass

지금은 가능한 전화 번호를 나열하고 싶습니다. 지금 나는 find_numbers 컨트롤러를 가지고 있으며, 새로운 컨트롤러는 생성하고 파괴합니다.

새로운 액션에는 사용자가 채우는 매개 변수가 있으며 작성 액션은 쇼를 렌더링하고 쇼는 함께 표시하고 숫자를 나열합니다.

그러나, 내가 가지고있는 코드로, 나는 오류를 얻을

NoMethodError in Find_numbers#create 

Showing C:/Sites/dct/app/views/find_numbers/show.html.erb where line #1 raised: 

undefined method `each' for nil:NilClass 

내가 검색 매개 변수가 올바르게 설정되지 않기 때문에 내 @numbers 변수, 전무를 반환 있기 때문에 생각합니다.

다음은 새로운 작업에 대한 내 생각이다 :

<div class="container"> 
<div class="row"> 
    <div class="span6 offset3"> 
    <%= form_tag("/find_numbers", :method => "post") do %> 

     <%= label_tag(:in_postal_code, "Near US postal code (e.g. 94117):") %> 
     <%= text_field_tag(:in_postal_code) %> 

     <%= label_tag(:near_number, "Near this other number (e.g. +4156562345)") %> 
     <%= text_field_tag(:near_number) %> 

     <%= label_tag(:contains, "Matching this pattern (e.g. 415***EPIC):") %> 
     <%= text_field_tag(:contains) %> 

     <%= submit_tag("Search", :class => "btn btn-large btn-primary") %> 


    <% end %> 
    </div> 
</div> 
</div> 

이것은 find_numbers 컨트롤러

class FindNumbersController < ApplicationController 

    def new 
     @user = current_user 
    end 

    def create 
     @user = current_user 
     render 'find_numbers/show' 
    end 

    def show 
     @user = current_user 
     client = Twilio::REST::Client.new(@user.twilio_account_sid, @user.twilio_auth_token) 

     search_params = {} 
      %w[in_postal_code near_number contains].each do |p| 
      search_params[p] = params[p] unless params[p].nil? || params[p].empty? 
     end 

     local_numbers = client.account.available_phone_numbers.get('US').local 
     @numbers = local_numbers.list(search_params)  


    end 

end 

입니다 그리고 이것은, 쇼보기

<%= number.friendly_name %> 
<%= number.phone_number %> 

I입니다 나는 얻는다. 오늘 아침 (중국 시간) 이후로 대답에 더 가깝지만, 여전히 서클에서 뛰어 다니고 있습니다! 어떤 도움이라도 대단히 감사합니다.

답변

1

레일에 대해 더 자세히 배우고 싶을 수도 있습니다.

@user = current_user 
client = Twilio::REST::Client.new(@user.twilio_account_sid, @user.twilio_auth_token) 

search_params = {} 
    %w[in_postal_code near_number contains].each do |p| 
    search_params[p] = params[p] unless params[p].nil? || params[p].empty? 
    end 

local_numbers = client.account.available_phone_numbers.get('US').local 
@numbers = local_numbers.list(search_params) 
render 'find_numbers/show' 

: 당신이 지금하고있는 것은 레일이 작동하도록 설계 방법에 대해 갈 것 같다하지만 당신은 당신의 작성 작업에 다음과 같은 넣을 수있을 http://pragprog.com/book/rails4/agile-web-development-with-rails

내가 시작하는 데 사용되는 책이다 내가 Twilio에 대해 아무것도 몰라

<% @numbers.each do |number| %> 
    <%= number.friendly_name %> 
    <%= number.phone_number %> 
<% end %> 

그래서 사용을 통해 확인할 수없는 경우 또한 각 루프 같은이해야 할 것이다 쇼보기 있도록 객체 @numbers을 기억 그들의 API.

+0

썬케일, 당신은 훌륭합니다! 뷰 사이에 유지되는 변수를 알지 못했습니다 (예 : create 액션에서 @number를 정의한 경우 show 액션에 표시되지 않음). 의견을 보내 주시면 효과가 있습니다. 내가 제안한 책도 가져올거야. –

+0

듣기가 대단히 기쁩니다! –

관련 문제