如何通过选择rails 4中的下拉选项来执行控制器的操作

时间:2014-07-04 14:34:06

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

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

为了您的理解,我上传了一个屏幕截图 enter image description here

我看过这个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操作

1 个答案:

答案 0 :(得分:1)

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

但这并不意味着一切都会丢失:这意味着您需要

a)当选择更改

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

b)更改您的控制器代码,以便表单提交到单个固定网址,但控制器中的操作会根据参数执行不同的操作。像

这样的东西
#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