首页 > 解决方案 > TrainingSessionsController#create + Rails 5 中的 ActionController::ParameterMissing

问题描述

我正在尝试在我的索引页面上实现搜索功能。按照我在网上找到的教程https://medium.com/@zylberberg.jonathan/creating-a-search-form-in-rails-5-77fdef6be74d

我计划实施更强大的搜索,但甚至无法让它在单个字段中工作,无法克服此错误:参数丢失或值为空:training_session。为什么它会调用我的创建操作?我正在尝试调用应该对应于我认为的 training_sessions_path 的索引?

其他错误详细信息: 参数:

{"utf8"=>"✓", "authenticity_token"=>"VG+v...==", "exercise_id"=>"1", "method"=>"get"}

任何帮助表示赞赏,我一定在某个地方犯了一些根本性的错误。下面贴上相关代码

索引页:

<%= form_tag(training_sessions_path method: :get) do%>
  Exercise <%= text_field_tag :exercise_id, params[:exercise_id]%>
<%= submit_tag 'Search', name: nil %>
<% end %>

TrainingSessions控制器

def index
  if params[:exercise_id]
    @training_sessions = TrainingSession.joins(:exercise).where('exercise_id =', "%#{params[:exercise_id]}%")
  else
      @training_sessions = TrainingSession.joins(:exercise).order("#{sort_column} #{sort_direction}")
  end
  end
  private
  def training_session_params
    params.require(:training_session).permit(:user_id, :exercise_id, :sets, :reps, :weight, :rpe, :training_date, :projected_max, :name)
  end

路线:

training_sessions GET    /training_sessions(.:format)                                             training_sessions#index
                                     POST   /training_sessions(.:format)                                             training_sessions#create
                new_training_session GET    /training_sessions/new(.:format)                                         training_sessions#new
               edit_training_session GET    /training_sessions/:id/edit(.:format)                                    training_sessions#edit
                    training_session GET    /training_sessions/:id(.:format)                                         training_sessions#show
                                     PATCH  /training_sessions/:id(.:format)                                         training_sessions#update
                                     PUT    /training_sessions/:id(.:format)                                         training_sessions#update
                                     DELETE /training_sessions/:id(.:format)                                         training_sessions#destroy
training_sessions_calc_projected_max POST   /training_sessions/calc_projected_max(.:format)                          training_sessions#calc_projected_max

标签: ruby-on-railsruby-on-rails-5.2

解决方案


你错过,了路径和方法

<%= form_tag training_sessions_path, method: :get do%>
  Exercise <%= text_field_tag :exercise_id, params[:exercise_id]%>
  <%= submit_tag 'Search' %>
<% end %>

推荐阅读