如果这看起来非常基础,那么提前使用Ruby on Rails和编程时会非常新,所以请提前道歉。
我正在开发一个非常简单的基于wiki的网站,用户可以在其中升级和降级他们的帐户。
在我的downgrade.html.erb
我有以下代码:
<p>Are you sure you want to downgrade back to standard?<p>
<%= link_to "Yes", :controller => :charges, :action => :downgrade1, class: 'btn btn-danger' %>
<%= link_to "No", root_url, class: 'btn btn-success' %>
在我的charges_controller.rb
我的 downgrade1 方法:
def downgrade1
if current_user.premium?
current_user.update_attribute(:role, 'standard')
flash[:success] = "You have been downgraded to standard."
redirect_to root_url
else
false
end
end
最终,当用户点击“是”按钮时,我希望运行downgrade1
方法并将用户的帐户降级回标准。
但是,网站会在我的页眉和页脚中加载“显示网页”,但用户仍然是高级用户。
我有什么想法可以解决这个问题吗?
答案 0 :(得分:1)
我认为这里的问题是您没有为link_to
指定HTTP方法,例如
<%= link_to "Yes", :controller => :charges, :action => :downgrade1, class: 'btn btn-danger', :method => :patch %>
默认情况下,它会调用GET方法,然后数据库中的任何内容都不会被更改。
并确保您已在routes.rb
答案 1 :(得分:0)
你在if - else语句的末尾缺少一个结束标记:
else
false
end
end
答案 2 :(得分:0)
感谢您尝试解决我的问题,您的答案最终导致我找到了解决方案。
最后,我在我看来使用了这段代码:
<%= button_to "Yes", { :controller => "charges", :action => "downgrade1"}, class: 'btn btn-danger' %>
并将其添加到我的routes.rb
post "charges/downgrade1" => "charges#downgrade1"
降级现在按计划进行。
再次感谢您的帮助。