2016-06-23 7 views
0

現在、属性で1をインクリメントするコントローラーメソッドがあり、そのユーザーが見つかった特定のページにリダイレクトする必要があります。しかし、理由のために、私はそれがelseステートメントとメソッドの終了をレンダリングし続けることがわかりません。私は自分のコードを掲示し、一度それを見たらそれをクリアします。コントローラーメソッドが正しくリダイレ​​クトされない

CONTROLLER:

def search 
    @subscriber = Subscriber.new 
    end 

    def visit 
    @subscriber = Subscriber.find_by_phone_number(params[:phone_number]) 
    if @subscriber 
     @subscriber.visit ||= 0 
     @subscriber.visit += 1 
     @subscriber.save 
     flash[:notice] = "Thank You #{@subscriber.first_name}. You have #{@subscriber.days_till_expired} until renewal" 
     redirect_to subscribers_visit_path(:subscriber) 
    else 
     render "search" 
    end 
    end 

VIEW:

<h1>Hello Subscriber</h1> 

<% if @subscriber %> 
    <tr> 
    <td><%= image_tag avatar_url(@subscriber) %></td> 
    <td><%= @subscriber.first_name %></td> 
    </tr> 
<% else %> 
    <tr><td>No subscriber found!</td></tr> 
<% end %> 

それは方法の他に「検索」部分とないsubscriber_visit_pathをレンダリングし続ける何らかの理由でそれだけで+= 1一部を行います良い。だから、基本的にそれは加入者を見つけることですが、それが増えた後に加入者を無駄にするようです?私はここで何かを見逃していますか?

+0

"+ = 1の部分が完了しました"ということをどのように知っていますか? – Andy

答えて

1

Mr Bassのコメントに同意します。プロセスが正常に動作することを確認するテストはありますか?

特にif @subscriber

if文に組み込まれたexists?を使用すると、実際の結果と誤った結果が得られることがあります。

+0

それは余分なコードです。この場合、 'if @ subscriber'がまったく同じことをするでしょう。 – Andy

+0

まあ、私は軽度の初心者ですが、私は自分のレールコンソールに入ってidで特定のレコードを探して、idが存在しないと 'nil'を返しません - それは大きなold ActiveRecord:RecordNotFoundエラーです。私はレールがエラーを処理しているとは知らないのですが? – MageeWorld

+0

私はRailsを手にすることができないので、あなたが言ったことを確認することはできませんが、あなたのGemfileの ':development、:test'グループに' byebug' gemを入れて 'bundle '。 '@subscriber = Subscriber.find_by ... etc'行の後に' byebug'を置いてください。その後、あなたのレールサーバーを起動し、訪問ページに移動します。すべてが一時停止したら、コマンドラインに戻り、byebugがすべてを停止したことを確認して、コードで遊ぶことができます。 '@ subscriber'と入力し、それが何を返すかを見てください。 – Andy

関連する問題