如何使用Haml和Rails中的复选框为表中的记录发送ID

时间:2015-11-03 20:06:14

标签: ruby-on-rails ruby ruby-on-rails-3

我的Rails 1.9应用程序存在问题,我希望发送与我正在迭代并显示的模型表相关的ID。

我正确设置了checkbox_tag,并尝试将整个表格封装在form_tag中,以便将ID发送回控制器,以便我可以在不同的视图中对其进行编辑。 / p>

与此相关的代码的路线部分是:

routes.rb中:

match '/workflow_queue/index', :to => 'WorkflowQueue#index', :as => 'workflow_queue'
match '/workflow_queue/import_tendays', :to => 'WorkflowQueue#import', :as => 'workflow_queue_import'
match '/workflow_queue/import_finish', :to => 'WorkflowQueue#import_finish', :as => 'workflow_queue_import_finish'
match '/workflow_queue/delete', :to => 'WorkflowQueue#delete', :as => 'workflow_queue_delete'
resources :workflowqueue do
  member do
    post 'edit_multiple'    
  end
end

路由文件应该根据文档中的内容创建一个edit_multiple_workflowqueue_path的路径,它似乎正在这样做,因为当我去显示包含此代码的部分时。

_form_workflows.html.haml

=form_tag  edit_multiple_workflowqueue_path  do

  %thead
    %tr

      %th= 'Entity_Type'
      %th= 'Entity_ID'
      %th= 'Workflow ID'
      %th= 'Message'
      %th= ''
      %th= ''


  %tbody
    - for wf in @workflowtasks
      %tr

        %td= wf.entity_type
        %td= wf.entity_id
        %td= wf.workflow_id
        %td= wf.message
        %td= check_box_tag "wf_ids[]", wf.id
        %td= link_to "Destroy", workflow_queue_delete_path(wf)
=submit_tag "Edit Checked"

我一直收到错误

No route matches {:action=>"edit_multiple", :controller=>"workflowqueue"}

这对我来说没有多大意义,因为在我的控制器代码中,它显然定义了edit_multiple动作,并且路径中控制器的名称与用于的名称完全相同控制器处理的每个其他动作,这意味着如果我执行rake routes,控制器的名称将显示为" new"," edit"和&#34 ;删除"方法自动创建Rails。

我真的不明白为什么它无法在控制器内找到方法。控制器代码是:

class WorkflowQueueController < ApplicationController

  def index
    @workflows = WorkflowQueue.all

    @title = 'Workflow Queues'

  end

  def import
    @title = 'Import Tenday Notices'
    @form_errors = []
  end

  def import_finish
    @title = 'Imported Tendays'
    if params[:xml]
      @start_time = Time.now

      @filename = params[:xml].original_filename

      errors_and_imports = WorkflowQueue.read_tenday_xml(params[:xml].read)
      @errors = errors_and_imports[:errors]
      @extra_imports = errors_and_imports[:extra_imports]

      @form_errors = []

      @workflowtasks = WorkflowQueue.all
    else
      @form_errors = [ 'Please select a file to upload.' ]
      render 'import'
    end
  end

  def edit_multiple
    @workflows = WorkflowQueue.all
    render 'index'
  end

  def delete
    url_string = request.url
    id = url_string.split('.')[3]
    workflow_to_be_deleted = WorkflowQueue.find(id.to_i).destroy

    @workflowtasks = WorkflowQueue.all
    @title = 'Imported Tendays'
    @form_errors = []
    @errors = []
  end

end

edit_multiple中的代码是一次性代码,只是为了查看是否正在调用该方法。

1 个答案:

答案 0 :(得分:0)

As&#39; edit_multiple&#39; route是&#39; workflowqueue&#39;的成员,您需要传递Workflowqueue id:

edit_multiple_workflowqueue_path(@workflowqueue)