使用onclick选项在视图中调用控制器方法

嗨,我有以下问题。 我想调用一个控制器方法,通过按钮或链接的onklick选项执行一些sql语句。

所以我在我的控制器中有一个方法“发布”。 它看起来像这样:

def publish do execute sql statements flash[:notice] = 'sql statements executed.' end 

在我看来,我希望有一个按钮或链接来调用这个方法,如下所示:

 <input type="button" onclick=""> 

但我得到错误:

未定义的局部变量或方法

我还尝试将其路由为使用此方法:action。 这不起作用。 我现在搜索了一段时间,并通过使这个方法成为helper_method找到了一些解决方案,尽管我再次得到了同样的错误。 我是Ruby和Rails的新手,所以我希望你能帮助我。

如果在您的视图中尝试类似<% controller.publish %> ,则会在呈现视图时调用publish操作,而不是在用户单击按钮调用。

你可以这样做:

  1. 创建一个将在请求时调用publish的路由。 例如,假设路线是/publish

  2. 在你看来,把这样的东西:

onclick属性的值必须是有效的JavaScript,单击该按钮时将执行该JavaScript。 在JS中,设置window.location会导致浏览器导航到其他页面。 在这种情况下,我们将浏览器导航到/publish ,这将导致您的publish操作被调用。 无论您在publish呈现什么,都将显示在浏览器中。

在上面显示的publish代码中,您的Ruby语法是错误的,但我假设它只是一个示例,而不是您正在使用的实际代码。

您的ruby on rails代码是服务器端。 您视图中的代码,例如是客户端。

您不能直接从客户端代码调用服务器端方法,因为客户端代码只是在用户的浏览器中运行。 我没有使用过RoR,所以不知道细节,但你必须从客户端代码向服务器提交一条消息,然后在服务器端你会想要接收它并从那里调用publish方法。 希望这可以帮助。

首先,如果您的SQL语句要更改任何数据(它看起来像它们的意图),那么使用POST请求而不是GET请求非常重要。 要做到这一点,您需要使用基本表单提交而不是单击链接,或者在单击链接时使用javascript提交POST请求。 让我们谈谈第二种方式,因为这将与您希望应用程序的外观保持一致。

假设jQuery,您可以使用jQuery.post方法在单击按钮时发布到您的publish操作。 在成功回调中,您可以显示有关已执行的sql语句的消息。

@ alex-d的回答似乎已经足够了。 只需使用button_to ,在publish操作结束时,您可以重定向到同一页面(如果您正在加载要在视图中显示的记录,则可以重定向到之前的相同操作)。

编辑:来自@ alex-d的回答:

创建一个将在请求时调用发布的路由。 例如,假设路线是/ publish。

 GET '/publish' to: 'Controller#publish' 

在你看来,把这样的东西:

  

现在在您的控制器方法上,重定向:

 def publish do execute sql statements flash[:notice] = 'sql statements executed.' redirect_to route_where_the_button_view_is_path #(or render if that controller method isnt necessary) return #to avoid multiple render or redirect error (maybe not necessary) end 

PD:我的代码可能在第一次尝试时无效,我正在从内存中解决这个问题。

GL&HF。