2011-10-27 9 views
0

Railsは私のリダイレクトを無視しています。railsは自分のリダイレクトを無視します

使用事例:

  1. ユーザーが自分のアカウントに移動し、彼のサブスクリプション・ステータスを表示するには、
  2. アプリは彼の現在のサブスクリプションを一覧表示し、それをキャンセルするオプション
  3. ユーザーがサブスクリプション
  4. をキャンセルするオプションを選択し、
  5. アプリはサブスクリプションレコードを更新し、のユーザーをサブスクリプションアクションにリダイレクトする必要があります

    - >レールはこの最後のステップを無視します...私が間違っていることは何ですか?

ルート

map.resources :users, ..., :member => { ..., :subscriptions => :get, :subscribe => :post, :unsubscribe => :put} 

コントローラ:

def subscriptions 
    @tradesman = User.find_by_id(params[:id]) 
    @subscription = @tradesman.current_subscription || Subscription.new 
    @all_subscriptions = Subscription.find(:all) 
    end 

    def subscribe 
    @tradesman = User.find_by_id(params[:id])  
    @subscription = current_user.subscriptions.build(params[:subscription]) 
    @subscription.update_attributes(:started_at => Time.zone.now) 
    @subscription.save 
    redirect_to :action => 'subscriptions', :id => @tradesman.id 
    end 

    def unsubscribe 
    @tradesman = User.find_by_id(params[:id]) 
    @subscription = @tradesman.current_subscription 
    @subscription.update_attributes(:ended_at => Time.zone.now) 
    @subscription.save 
    redirect_to :action => 'subscriptions', :id => @tradesman.id 
    end 

ビュー:

<div class = 'wrapper'> 
    <%= render :partial => "my_account_leftbar" %> 
    <% form_for @subscription, :url => subscribe_user_path(current_user) do |f| %> 

     <% @all_subscriptions.each do |subscription| %> 
     <div class="field">Start: <%= subscription.started_at %></div><br><br> 
     <% end %> 

     <% if @subscription.new_record? %> 
     <div class="field"> 
      <%= f.check_box :subscription_type %> 
      <div class="actions"> 
      <%= f.submit "Subscribe", :class => "button mr8" %> 
      </div> 
     </div> 
     <% else -%>  
     <%= f.check_box :subscription_type, :value => @subscription.subscription_type, :disabled => true %> 

      <% form_for @subscription, :url => unsubscribe_user_path(current_user) do |f| %> 
      <div class="actions"> 
      <%= f.submit "Unsubscribe", :class => "button mr8" %> 
      </div> 
      <% end %> 

     <% end %> 

    <% end %> 
</div> 
+0

を「購読」フォーム内の「購読中止」フォーム - 意味がありませんでした。私は自分のビューを再編成しました(これらの2つのフォームを1つは「if」パートに、もう1つは「else」パートに分けました。 – hebe

+0

stackoverflowsが許可するとすぐに新しいビューを投稿します.. – hebe

答えて

0

利用redirect_toの代わりに、render(あなたunsubscribeアクションの最後のメソッド呼び出し) 。

+0

あなたの入力をありがとう申し訳ありません、実際にredirect_toを試みました(そしてうまくいきませんでした)。それで、redirect_toは動作しません – hebe

0

私が「購読」フォーム内の「購読中止」フォームを入れ子にしたビューでバグが見つかりました。これは意味がありませんでした。

私は「他」部分に「もし」部分と、他の中でこれら二つの形式、1を分離(私の見解を並び替える今罰金作品:私はネストされたビューのバグを発見

<div class = 'wrapper'> 
    <%= render :partial => "my_account_leftbar" %> 
    <% @all_subscriptions.each do |subscription| %> 
    <div class="field">Start: <%= subscription.started_at %></div><br><br> 
    <% end %> 

    <% if @subscription.new_record? %> 
    <% form_for @subscription, :url => subscribe_user_path(current_user) do |f| %> 
     <div class="field"> 
      <%= f.check_box :subscription_type %> 
      <div class="actions"> 
      <%= f.submit "Subscribe", :class => "button mr8" %> 
      </div> 
     </div> 
    <% end %> 
    <% else -%> 
    <% form_for @subscription, :url => unsubscribe_user_path(current_user) do |f| %> 
    <%= f.check_box :subscription_type, :value => @subscription.subscription_type, :disabled => true %> 
    <div class="actions"> 
     <%= f.submit "Unsubscribe", :class => "button mr8" %> 
    </div> 
    <% end %> 
    <% end %> 
</div> 
関連する問題