如何从另一个def继承def,来自同一个控制器Rails 4

时间:2015-05-17 11:43:29

标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller model

这就是我在我的演出控制器中所拥有的

def downloadpage
    ActiveRecord::Base.transaction do
      if current_user.points >= @gig.pointsneeded 
        current_user.points -= @gig.pointsneeded
        @gig.user.points += @gig.pointsneeded
        current_user.save
        @gig.user.save
        redirect_to @gig.boxlink
      else
        redirect_to :back, notice: "You don't have enough points"
      end
    end
  end

  def success_download
  end

def downloadpage,用户之间进行积分交换,当他们互相购买时(我没有买家和卖家)而不是“用户和当前用户”。现在你看到我有redirect_to @gig.boxlink中的def download page,在成功完成交易后,会直接重定向到演出的网址。

我打算创建一个名为“ success_download ”的页面,该视图将具有类似

的内容
yey you did it
<%= @gig.boxlink %>

并在def download page而不是redirect_to @gig.boxlink,请说

redirect_to success_download_path

问题是@gig在def success_download中不可用,但它位于def download page

  

我该如何进行继承?

1 个答案:

答案 0 :(得分:1)

@gig初始化的地方?它是DB中的对象变量吗?

如果这些变量至关重要,那么通过redirect_to将变量传递到不同的视图是个坏主意(例如,用户可以修改它们并在没有资金的情况下使交易成功)。

最好只渲染其他部分结果。

def downloadpage ActiveRecord::Base.transaction do if current_user.points >= @gig.pointsneeded current_user.points -= @gig.pointsneeded @gig.user.points += @gig.pointsneeded current_user.save if @gig.user.save render partial:'successful', locals:{link:@gig.boxlink} end else redirect_to :back, notice: "You don't have enough points" end end end

并且在视图中仅使用link变量。

另一种方法是使用保存事务状态的模型并在重定向中传递它的id。但是局部效果会很好。