【问题标题】:how to perform controller's action by selecting dropdown's option in rails 4如何通过在 rails 4 中选择下拉选项来执行控制器的操作
【发布时间】:2014-08-25 22:14:03
【问题描述】:

我在 ROR 中非常新鲜,在我的应用程序中我有 role 模型。现在在它的索引页面上,我将下拉列表放在顶部,因此用户可以选择特定角色并通过选择下拉列表选项相应地执行操作,并在单击提交时执行该操作。我不想通过link_to 这样做,任何人都可以解释一下我需要执行哪些步骤。我知道它可以由 Jquery 执行,但我也很差。

为了便于理解,我上传了一个屏幕截图

我看过这个RubyforumStackOverflow,但还是看不懂。如果有人可以一步一步地详细解释我,我将不胜感激。或者为我提供更好、更简单的资源。我不明白从哪里开始?

一些代码:

index.html.haml

.user_details.clearfix
  = form_for :role do |f|
    %h3 Listing Roles
    .selectbox.blueselect.frd
      = f.select(:name, [['Delete', 'delete'], ['Change Status', 'changestatus']],{:include_blank=> 'Select Action'},{:class=>'select1'})
      = f.submit 'Submit', :class=>'blue_btn frd'

    %label.actionlabel Actions
#accordion.tablerow.clearfix
  %table.tablelist{border: "0", cellpadding: "0", cellspacing: "0", width: "100%"}
    %tr
      %th{align: "left", valign: "middle"}  
      %th{align: "left", valign: "middle"} Sr. No.
      %th{align: "left", valign: "middle"} Name
      %th{align: "left", valign: "middle"} Description
      %th{align: "left", valign: "middle"} Is Active?
      %th{align: "left", valign: "middle"} Access Module
      %th{align: "left", valign: "middle"}
      %th{align: "left", valign: "middle"}
    - @count=0
    - @roles.each do |role|
      %tr
        %td{align: "left", valign: "middle"}
          %input.checkbox{type: "checkbox", :id=>'chkbox', :value=> role.id, :onclick=>"validate(this.value)"}
        %td{align: "left", valign: "middle"}= @count += 1
        %td{align: "left", valign: "middle"}= role.name
        %td{align: "left", valign: "middle"}= role.description
        %td{align: "left", valign: "middle"}= role.isactive
        %td{align: "left", valign: "middle"}= role.access_module_roles.map { |amr| amr.access_module.name }.join(", ")
        %td{align: "left", valign: "middle"}= link_to 'Show', role
        %td{align: "left", valign: "middle"}= link_to 'Edit', edit_role_path(role)
        %td{align: "left", valign: "middle"}= link_to 'Delete', role_path(role), :method=> :delete
  %br
  = link_to 'New Role', new_role_path, :class=>'blue_btn'

任何人都需要更多详细信息,然后我可以更新..想要执行delete 操作

【问题讨论】:

    标签: jquery ruby-on-rails ruby forms haml


    【解决方案1】:

    不使用 javascript,您无法从选择中更改操作。该操作由表单提交调用的 url 确定,该 url 又在表单的action 属性中指定。选择或任何其他表单输入所能做的就是更改提交到该 url 的 params

    这并不意味着一切都丢失了,但是:这意味着您要么需要

    a)在选择更改

    时,使用JavaScript更改表单的action属性

    b) 更改您的控制器代码,以便表单提交到单个固定 url,但控制器中的操作根据参数执行不同的操作。类似的东西

    #in the controller
    @foo = Foo.find(params[:id])
    if params[:foo_action] == "destroy"
      @foo.destroy
    elsif params[:foo_action] == "update"
      @foo.update_attributes(:params[:foo])
    ...etc
    

    【讨论】:

    • 对于选项 b?很明显,您需要在路由文件中添加一个条目,将相关的 URL(或具体的路径部分)连接到相关的控制器和操作。你可能已经有了,我不知道。
    • 我正在尝试在没有 javascript 的情况下获得此解决方案。我什么时候完成。将在此处发布答案。对于您的回复,我想给 1+ :)
    • 仅供参考,保持应用程序中的路由数量非常少并尽可能多地使用参数是一种常见模式。以 API 为例,通常所有 API 请求都通过一条路径。显然这与 REST 相悖,但它为您提供了更多的灵活性来处理事情。
    • 你是对的绅士......我知道这一点,通过使用参数我已经解决了这个问题而没有使用 javascript.. :) 感谢您的时间和回复......衷心感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多