不确定为什么强参数不起作用 - 参数丢失或值为空:
Not sure why strong params isn't working - param is missing or the value is empty:
希望有人能提供帮助。我一直在搜索其他 "param is missing" 问题,但似乎无法找出问题所在。
在我的路由文件中,我有这个嵌套资源 "actions"
resources :jobs do
resources :actions
end
关联模型。忽略 "action_reference"。那是另外一回事。
class Job < ActiveRecord::Base
has_many :actions
end
class Action < ActiveRecord::Base
belongs_to :job
belongs_to :action_reference
end
我正在尝试通过使用 button_to
发出 POST 请求来创建新操作
这是 ActionsController
class ActionsController < ApplicationController
before_action :set_job
before_action :set_action, only: [:show, :edit, :update]
# GET /jobs/:job_id/actions/:id
def show
end
# GET /jobs/:job_id/actions/new
def new
@action = Action.new
end
# GET /jobs/:job_id/actions/:id/edit
def edit
end
# POST /jobs/:job_id/actions/
def create
@action = @job.actions.create(action_params)
if @action.save
flash[:success] = "Next step successfully added."
redirect_to jobs_path
else
flash[:danger] = @action.errors.full_messages.join(", ")
redirect_to new_job_action_path
end
end
# PATCH to /jobs/:job_id/actions/:id
def update
if @action.update(action_params)
flash[:success] = "Next step successfully updated."
redirect_to jobs_path
else
flash[:danger] = @action.errors.full_messages.join(", ")
redirect_to edit_job_action_path
end
end
private
def set_job
@job = Job.find(params[:job_id])
end
def set_action
@action = Action.find(params[:id])
end
def action_params
params.require(:action).permit(:action_reference_id, :job_id, :completed_at, :next_action_date)
end
end
这是我的 button_to
<%= button_to answer[:text], post_action_jobs_path(@job), method: "post", params: { action: { action_reference_id: answer[:action_reference_id], job_id: @job_id , completed_at: answer[:action_completed_at], next_action_date: answer[:next_action_date] } }, type: "button", class: "btn btn btn-info btn-block" %>
我知道问题与我在视图中传递给 post_action_jobs_path 的参数或在控制器中传递给 action_params 的参数有关,但我可以想通了。
当我 运行 出现这个错误时:
undefined method `permit' for "create":String Did you mean? print
我刚才看到一些帖子说 "action" 是 Rails 中的保留字,所以你必须使用其他东西,但如果那是真的,我不确定如何去做那个。
任何帮助将不胜感激:)
可悲的是,我似乎无法解决这个问题,所以我重命名了我的 "actions" table 并将所有对 "action" 的引用替换为不同的词 "step" .现在可以使用了!
是的,不幸的是,这是由于 "action" 是 rails 控制器中的现有方法。它用于获取已调用的操作的名称。在这种情况下 "action" 将等于字符串 "create".
您可以做的一件事是将 Action 模型重命名为 JobAction 并使用 params.require(:job_action)
希望有人能提供帮助。我一直在搜索其他 "param is missing" 问题,但似乎无法找出问题所在。
在我的路由文件中,我有这个嵌套资源 "actions"
resources :jobs do
resources :actions
end
关联模型。忽略 "action_reference"。那是另外一回事。
class Job < ActiveRecord::Base
has_many :actions
end
class Action < ActiveRecord::Base
belongs_to :job
belongs_to :action_reference
end
我正在尝试通过使用 button_to
发出 POST 请求来创建新操作这是 ActionsController
class ActionsController < ApplicationController
before_action :set_job
before_action :set_action, only: [:show, :edit, :update]
# GET /jobs/:job_id/actions/:id
def show
end
# GET /jobs/:job_id/actions/new
def new
@action = Action.new
end
# GET /jobs/:job_id/actions/:id/edit
def edit
end
# POST /jobs/:job_id/actions/
def create
@action = @job.actions.create(action_params)
if @action.save
flash[:success] = "Next step successfully added."
redirect_to jobs_path
else
flash[:danger] = @action.errors.full_messages.join(", ")
redirect_to new_job_action_path
end
end
# PATCH to /jobs/:job_id/actions/:id
def update
if @action.update(action_params)
flash[:success] = "Next step successfully updated."
redirect_to jobs_path
else
flash[:danger] = @action.errors.full_messages.join(", ")
redirect_to edit_job_action_path
end
end
private
def set_job
@job = Job.find(params[:job_id])
end
def set_action
@action = Action.find(params[:id])
end
def action_params
params.require(:action).permit(:action_reference_id, :job_id, :completed_at, :next_action_date)
end
end
这是我的 button_to
<%= button_to answer[:text], post_action_jobs_path(@job), method: "post", params: { action: { action_reference_id: answer[:action_reference_id], job_id: @job_id , completed_at: answer[:action_completed_at], next_action_date: answer[:next_action_date] } }, type: "button", class: "btn btn btn-info btn-block" %>
我知道问题与我在视图中传递给 post_action_jobs_path 的参数或在控制器中传递给 action_params 的参数有关,但我可以想通了。
当我 运行 出现这个错误时:
undefined method `permit' for "create":String Did you mean? print
我刚才看到一些帖子说 "action" 是 Rails 中的保留字,所以你必须使用其他东西,但如果那是真的,我不确定如何去做那个。
任何帮助将不胜感激:)
可悲的是,我似乎无法解决这个问题,所以我重命名了我的 "actions" table 并将所有对 "action" 的引用替换为不同的词 "step" .现在可以使用了!
是的,不幸的是,这是由于 "action" 是 rails 控制器中的现有方法。它用于获取已调用的操作的名称。在这种情况下 "action" 将等于字符串 "create".
您可以做的一件事是将 Action 模型重命名为 JobAction 并使用 params.require(:job_action)