【问题标题】:rails ignores my redirectrails 忽略了我的重定向
【发布时间】:2011-10-27 11:17:39
【问题描述】:

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>

【问题讨论】:

  • 在我将“取消订阅”表单嵌套在“订阅”表单中的视图中发现了错误——这没有任何意义。我重新排列了我的视图(将这两种形式分开,一种在“if”部分,另一种在“else”部分。现在可以正常工作了。
  • 将在stackoverflows允许时发布新视图..

标签: ruby-on-rails redirect routing


【解决方案1】:

使用redirect_to 而不是renderunsubscribe 操作中的最后一个方法调用)。

【讨论】:

  • 感谢您的意见。抱歉,我实际上尝试了 redirect_to (但它没有用)。我之前也尝试过渲染(也不起作用),但忘记替换它。所以:redirect_to 不起作用
【解决方案2】:

在我将“取消订阅”表单嵌套在“订阅”表单中的视图中发现了错误 - 这没有任何意义。

我重新排列了我的视图(将这两种形式分开,一种在“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> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-30
    • 2023-03-14
    • 2018-06-09
    • 2013-10-19
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多