Rails 4 - 使用form_tag将参数从视图传递到控制器

时间:2014-10-07 00:23:48

标签: ruby forms ruby-on-rails-4 parameters

我有一些看似简单的东西,我需要一些帮助,目前在Rails 4和Ruby 2.1.0中工作

我在工资单索引页面上工作,用户可以从页面上的select_tag中选择一周。我的工资单控制器中有一个@current_week变量,我想传递一个参数,但是我在使用form_tag时遇到了一些麻烦。这是我到目前为止所得到的:

index.html.haml

%h1 Payroll Index
%h6= "Current Week: #{@current_week}"
.week_selector
=form_tag payroll_path, action: :update_week do
    =select_tag :current_week, options_from_collection_for_select(@weeks, 'id', 'start_date')
    =submit_tag

payroll_controller.rb

class PayrollController < ApplicationController
  def index
    @weeks = Week.all
    @current_week = params[:current_week] || Week.this_week.display_date
  end

  def update_week
    @current_week = params[:current_week] 
  end
end

的routes.rb

Project::Application.routes.draw do
  resources :payroll, only: [:index, :update] do
    post '/:update_week' => 'payroll#index', as: :payroll
  end
...

理想情况下,我希望用户能够提交表单,只需更新控制器中的@current_week变量,仍然保留在索引页面上。当然,有一种简单的方法可以解决这个问题吗?

我在路线和形式上尝试了几种不同的组合,但没有取得多大进展。任何帮助,将不胜感激。谢谢!

更新:

根据注入的建议,我将表单更改为以下内容:

  =form_tag payrolls_path, method: :get do
    =select_tag :current_week, options_from_collection_for_select(@weeks, 'id', 'start_date')
    =submit_tag

并收到以下错误:

undefined local variable or method `payrolls_path' for #<#<Class:0x00000101e045a0>:0x0000010c3af450>

如所要求的,这是rake routes的相关输出:

 Prefix Verb   URI Pattern                                 Controller#Action
   payroll_payroll POST   /payroll/:payroll_id/:update_week(.:format) payroll#index
     payroll_index GET    /payroll(.:format)                          payroll#index
           payroll PATCH  /payroll/:id(.:format)                      payroll#update
                   PUT    /payroll/:id(.:format)                      payroll#update
         employees GET    /employees(.:format)                        employees#index

谢谢!

1 个答案:

答案 0 :(得分:0)

如果要将current_week参数发送到索引路径,请将方法设置为GET:

= form_tag payroll_index_path, method: :get do

默认情况下,form_tag将使用POST,它不会路由到索引。