ruby-on-rails - 如何根据rails中的提交按钮触发不同的 Action

标签 ruby-on-rails model-view-controller rails-routing

我有一个包含东西列表的表单,以及一个更新项目的操作。

我想要另一个按钮,单击该按钮会触发不同的操作以删除所选项目。

  = form_for @new_item,:url => {:controller => "item_lists",:action => "update_list" } do |f|
     - @items.each do |it|
    %input{:type=>"hidden",:name=>"item_list[#{it.id}]position",:value=>it.position, :class=>'position'}
    %textarea{:name=>"item_list[#{it.id}]field1"}
      =it.field1
    %textarea{:name=>"item_list[#{it.id}]field2"}
      =it.field2
    %input{:type=>'checkbox', :name=>'selected_items[]', :value=>it.id}
    =(it.valid?) ? "" : it.errors.full_messages




    %input{:type=>"submit", :value=>"Save changes", :name=>'save'}
    %input{:type=>"submit", :value=>"Remove selected", :name=>'delete'}

This question似乎表明我应该检查我的 Action 中的参数以找出点击的内容。但这感觉很困惑,当我添加更多操作时,我的 Controller 可能会迅速退化为大量 if。

有没有更优雅的方法来做到这一点,即让它只路由到正确的方法?

谢谢你的帮助...

最佳答案

这并没有真正与 REST 结合。在 REST 和 Rails 中,您通常会对每个端点执行一个操作,而不是根据请求中的某些标准来决定端点。

话虽如此,您可以通过检查按下按钮的名称来根据提交按钮过滤操作。见 this SO question .

我认为这仅适用于您的表单所做的事情略有不同的情况,例如可能是一个就地更新的提交按钮与一个随后重定向到某个地方的提交按钮,例如“更新”与“更新并继续”(人为设计,但您明白我的意思)。

在评论中解决您的问题,您的方法不必演变成一长串 if s。您可以编写一些代码来根据 submit 的名称确定调用哪个方法。按钮。一个简单的实现可能是:

# your form action
def update_list
  send update_list_action
end

protected

def update_list_action
  # just return the first action name found in the params
  action = %w(save delete).detect {|action| params[action] }
  "update_list_#{action}"
end

def update_list_save
  # handle save
end

def update_list_delete
  # handle delete
end

关于ruby-on-rails - 如何根据rails中的提交按钮触发不同的 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8259673/

相关文章:

ruby-on-rails - 我可以验证回形针附件不是危险的文件类型吗?

ruby-on-rails - Rails 强参数无法正常工作

ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController

ruby-on-rails - 如何在 Rails 3 中编写动态路由?

ruby-on-rails - 在 Rails 3 中动态创建路由别名

ruby-on-rails - 如何在测试环境中为 Time 类未定义 'parse',而不是开发或生产环境?

ruby-on-rails - 在 rails 中使用带有删除操作的 link_to

c++ - Qt4 中的 MVC 模式——除了使用面试之外如何组织代码

css - 同一组件的 MVC 不同 CSS 属性

model-view-controller - 可以在 RESTful MVC 框架中使用 HTTP 重定向吗?