如何从视图中调用控制器的方法?

我正在Ruby-On-Rails中开发一个小应用程序。 我想从视图中调用控制器的方法。 此方法仅在数据库表中执行一些插入。 这样做的正确方法是什么? 我尝试过类似的东西,但显然方法代码没有执行:

 

link_to方法调用中的方法选项实际上是HTTP方法,而不是操作的名称。 它在传递HTTP Delete选项时很有用,因为RESTful路由使用DELETE方法来命中destroy操作。

你需要做的是为你的行动设置一条路线。 假设它被称为join_event ,请将以下内容添加到routes.rb中:

 match '/join_event' => 'controllername#join_event', :as => 'join_event' 

务必将controllername更改为您正在使用的控制器的名称。 然后按如下方式更新您的视图:

 <%= link_to 'Join', join_event_path %> 

_path方法是基于routes文件中的as值生成的。

要组织代码,您可能希望将插入封装到静态模型方法中。 因此,如果你有一个名为MyModel的模型,你可以这样做

 class MyModel # ... def self.insert_examples MyModel.create(:name => "test") MyModel.create(:name => "test2") MyModel.create(:name => "test3") end end 

然后通过以下方式在您的操作中执行:

 MyModel.insert_examples 

除了agmcleod的答案,您还可以使用ActionController::Base::helper_method将控制器方法公开给视图:

 class EventsController < ApplicationController helper_method :join_event def join_event(event) # ... end end 

但在这种情况下,我认为你最好遵循他的建议并将此方法转移到模型层,因为它与数据库进行交互。