我有一些看似简单的东西,我需要一些帮助,目前在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
谢谢!
答案 0 :(得分:0)
如果要将current_week
参数发送到索引路径,请将方法设置为GET:
= form_tag payroll_index_path, method: :get do
默认情况下,form_tag将使用POST,它不会路由到索引。