这就是我在我的演出控制器中所拥有的
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
,
我该如何进行继承?
答案 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。但是局部效果会很好。