Ruby on rails 如何通过单击按钮或链接从视图调用rails方法

Ruby on rails 如何通过单击按钮或链接从视图调用rails方法,ruby-on-rails,ruby,methods,view,controller,Ruby On Rails,Ruby,Methods,View,Controller,基本上,我尝试在用户单击链接(或按钮或某种类型的交互元素)时执行rails方法 我试着把它放在视图中: <%= link_to_function 'Add' , function()%> 但这似乎不起作用。它只是简单地调用函数,用户甚至没有点击“添加”链接 我也试过用link_to,但也没用。我开始觉得没有一个干净的方法可以做到这一点。无论如何,谢谢你的帮助 另外,我在ApplicationController中定义了该方法,它是一种辅助方法。视图和控制器彼此独立。为了使链接在

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

我试着把它放在视图中:

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

但这似乎不起作用。它只是简单地调用函数,用户甚至没有点击“添加”链接

我也试过用link_to,但也没用。我开始觉得没有一个干净的方法可以做到这一点。无论如何,谢谢你的帮助


另外,我在ApplicationController中定义了该方法,它是一种辅助方法。

视图和控制器彼此独立。为了使链接在控制器内执行函数调用,需要对应用程序中的端点执行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 %>
然后假设在
MyController.rb
中有一个MyController类。然后定义方法
ajax\u 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
class MyController{:result=>result}
结束
结束
结束

希望就是希望

我认为这是不可能的,因为当用户点击按钮时,他正在使用他的计算机。rails代码在服务器中。您需要提供一个方法来通知rails服务器这个点击事件,也许您正在寻找的是Ajax?我认为您必须使用parens来调用函数:
:onclick=>“sum\u fn()”
。对吧?修好了谢谢!使用
onclick
可能不是注册单击处理程序的最佳方式。它应该用Javascript注册,但是为了演示的目的,我认为这已经足够了。谢谢,但是您缺少了post函数的右括号。
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