在按钮上单击使用控制器操作 - Rails

时间:2015-11-13 17:41:01

标签: ruby-on-rails ruby

如果这看起来非常基础,那么提前使用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方法并将用户的帐户降级回标准。

但是,网站会在我的页眉和页脚中加载“显示网页”,但用户仍然是高级用户。

我有什么想法可以解决这个问题吗?

3 个答案:

答案 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"

降级现在按计划进行。

再次感谢您的帮助。