рельсы игнорируют мой редирект - PullRequest
0 голосов
/ 27 октября 2011

Rails игнорирует мой редирект.

Вариант использования:

  1. пользователь переходит на свою учетную запись и выбирает опцию для отображения статуса своей подписки
  2. приложение отображает свою текущую подписку и возможность отменить ее
  3. пользователь отменяет подписку
  4. приложение обновляет запись подписки и должен перенаправить пользователя обратно на действие подписки

    ->, но rails игнорируетэтот последний шаг ... есть идеи, что я делаю не так?

Маршруты

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>

Ответы [ 2 ]

0 голосов
/ 29 октября 2011

Нашел ошибку в представлении, где я вложил форму «отписаться» в форму «подписаться» - что не имело смысла.

Я переставил свое представление (разделил эти две формы, одну в части 'if', а другую в части 'else'. Теперь работает нормально:

<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> 
0 голосов
/ 27 октября 2011

Используйте redirect_to вместо render (последний вызов метода в вашем unsubscribe действии).

...