我正在Ruby-On-Rails中开发一个小应用程序。我想从视图中调用控制器的方法。此方法仅在数据库表中执行一些插入。这样做的正确方法是什么?我尝试过类似的东西,但显然方法代码没有执行:
<%= link_to 'Join', method: join_event %>
答案 0 :(得分:5)
link_to方法调用中的method选项实际上是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
答案 1 :(得分:4)
除了agmcleod的答案,您可以使用ActionController::Base::helper_method
将控制器方法公开给视图:
class EventsController < ApplicationController
helper_method :join_event
def join_event(event)
# ...
end
end
但在这种情况下,我认为你最好遵循他的建议并将此方法移至模型层,因为它与数据库进行交互。