【问题标题】:How to call rails method from view on button or link click如何从按钮视图或链接单击中调用 rails 方法
【发布时间】:2014-01-29 00:43:44
【问题描述】:

基本上,我试图在用户单击链接(或按钮或某种类型的交互式元素)时执行 rails 方法。

我试着把它放在视图中:

<%= link_to_function 'Add' , function()%>

但这似乎不起作用。它最终只是在没有用户点击“添加”链接的情况下调用了该函数。

我也尝试过使用 link_to,但这也不起作用。我开始认为没有一种干净的方法可以做到这一点。无论如何,感谢您的帮助。

附言。我在 ApplicationController 中定义了该方法,它是一个辅助方法。

【问题讨论】:

  • 我认为这是不可能的,因为当用户点击按钮时,他正在使用他的电脑。 Rails 代码在服务器中。您需要提供一种方法来通知 Rails 服务器有关此点击事件也许您正在寻找的是 Ajax?

标签: ruby-on-rails ruby methods view controller


【解决方案1】:

视图和控制器是相互独立的。为了使链接在控制器中执行函数调用,您需要对应用程序中的端点进行 ajax 调用。该路由应该调用 ruby​​ 方法并向 ajax 调用的回调返回一个响应,然后您可以解释该响应。

举个例子,在你看来:

<%= link_to 'Add', '#', :onclick => 'sum_fn()' %>
<%= javascript_tag do %>
    function sum_fn() {
        /* Assuming you have jQuery */
        $.post('/ajax/sum.json', {
             num1: 100,
             num2: 50
        }, function(data) {
             var output = data.result;
             /* output should be 150 if successful */
        });
    }
<% end %>

在您的 routes.rb 中为您的 ajax 调用端点添加一个 POST 路由。

post '/ajax/sum' => 'MyController#ajax_sum'

然后假设您在mycontroller.rb 中有一个 MyController 类。然后定义方法ajax_sum

class MyController < ApplicationController
    # POST /ajax/sum
    def ajax_sum
        num1 = params["num1"].to_i
        num2 = params["num2"].to_i
        # Do something with input parameter and respond as JSON with the output
        result = num1 + num2

        respond_to do |format|
              format.json {render :json => {:result => result}}
        end
    end
end

希望有希望!

【讨论】:

  • 我认为你必须使用括号来调用函数::onclick =&gt; 'sum_fn()'。对吗?
  • 已修复,谢谢!使用onclick 可能不是注册点击处理程序的最佳方式。应该用 Javascript 注册,但为了演示,我认为这就足够了。
  • 谢谢,但是您在 post 函数上缺少右括号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2022-06-17
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 2016-09-16
  • 2015-05-30
相关资源
最近更新 更多