我正在尝试向控制器添加一个名为rollback的操作。 正如我所见,我应该做的唯一事情是写新动作:
def rollback
puts "ROLLBACK!"
respond_to do |format|
format.html # index.html.erb
format.json { render json: @components }
end
修改routes.rb文件:
resources :components do
collection do
post :rollback, :as => 'rollback'
end
end
从某种观点调用行动:
<%= link_to 'Rollback', rollback_components_path %>
但是我收到以下错误:
Couldn't find Component with id=rollback
app/controllers/components_controller.rb:18:in `show'
那是因为控制器认为我们没有进行回滚操作,而是试图'显示'到id为'rollback'的组件。
对我来说似乎很奇怪的是调用'new'动作轨道使用new_component_path(没有s,单数),但是如果我写rollback_component_path它会抛出一个错误,我看不到视图。
答案 0 :(得分:1)
在您的路线中,您需要POST
,只需点击链接默认为GET
,所以要么写
resources :components do
collection do
get :rollback
end
end
然后link_to
将按预期工作。
我假设回滚操作不是幂等的,所以在这种情况下POST
在语义上更好。
如果您按如下方式编写链接,则rails将为您创建内联表单:
link_to 'Rollback', rollback_components_path, :method => 'post'
希望这有帮助。
答案 1 :(得分:1)
这将有效
的routes.rb
resources :components
match "components/rollback" => "components#rollback", :as => :rollback
在视图中
<%=link_to 'Rollback', rollback_path%>