Ruby on Rails - 从视图调用控制器方法

Posted

技术标签:

【中文标题】Ruby on Rails - 从视图调用控制器方法【英文标题】:Ruby on Rails - Call controller method from a view 【发布时间】:2012-05-23 05:44:44 【问题描述】:

抱歉,我有一个 Rails 新手问题。在我的 Rails 应用程序中,如何从视图中调用控制器中定义的方法?例如,假设我编写了一个检索股票信息的自定义方法。在我看来,我希望有一个常规的 html 按钮,单击该按钮将调用我的自定义方法并填充库存结果。

这是怎么做到的?我环顾四周,找不到直接的方法来做到这一点。但我确定我在这里遗漏了一些东西。

【问题讨论】:

没有真正的“直截了​​当”的方式来做到这一点。当一个网页被访问时,会预先生成整个页面并发送给客户端。这发生在用户甚至看到任何按钮之前,更不用说点击它们了。如果您以后想在页面中添加更多内容,则需要使用在客户端运行的 javascript 来执行 AJAX 请求以获取数据并将其添加到页面中。 【参考方案1】:

编辑:我通过标题来回答问题,这不是问题所在。您问题标题的答案在底部

您想要的是一个 ajax 请求,它是一个单独的控制器操作。你需要:

    单击按钮时请求路由并填充其 DOM 对象的javascript

    返回 ajax 请求所要求的任何内容的操作

有很多方法可以做到这一点,但如果您搜索“howto rails ajax”,您会发现大量教程可以帮助您。我喜欢的一种方式叫做 pjax:https://github.com/rails/pjax_rails

旧答案...

声明一个helper_method,像这样:

在您的控制器中:

private
def find_stock
  ...
end
helper_method :find_stock

在你看来:

<% find_stock.each do |stock| -%>

文档:http://api.rubyonrails.org/classes/AbstractController/Helpers/ClassMethods.html#method-i-helper_method

【讨论】:

谢谢。我会看一下rails AJAX教程。 我一直在寻找“旧”解决方案,有趣的是^^【参考方案2】:

您可以查看button_to 查看帮助程序的文档

这是一种方式,当然,您可以使用远程选项通过 AJAX 请求执行此操作。

【讨论】:

以上是关于Ruby on Rails - 从视图调用控制器方法的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails:将数据调用到 javascript 中的首选方法?

Ruby on Rails 中一个共享视图的两个控制器

Ruby on Rails 路由到控制器

在 ruby​​ on rails 中将参数从视图传递到控制器

如何根据从下拉列表中选择的 CATEGORY 来控制 NEW/EDIT 视图中的列标题。带有 MYSQL 的 Ruby on Rails

如何从 Ruby on Rails 中的字符串值创建变量名?