我已经使用Rails脚手架进行了一些测试,我尝试为已有的模型生成控制器和视图。
我正在尝试为我的模型编辑一个值。
在控制器中,所有需要的方法都存在,甚至还有:
# Never trust parameters from the scary internet, only allow the white list through.
def tag_params
params[:tag]
end
我尝试从我的模型(名为Tag)更新的唯一值是:name,所以我编辑了tag_params
方法,如下所示:
# Never trust parameters from the scary internet, only allow the white list through.
def tag_params
params[:tag].require(:tag).permit(:name)
end
就像我通常那样,但现在我得到param not found: tag
例外。
但是,如果我这样写的话
# Never trust parameters from the scary internet, only allow the white list through.
def tag_params
params[:tag].permit(:name)
end
它运作正常。那是为什么?
视图中的form_for声明如下所示:
<%= form_for(@tag) do |f| %>
对于那些不知道控制器中脚手架方法如何的人来说,这是其中的一部分:
# GET /tags/1/edit
def edit
end
# PATCH/PUT /tags/1
# PATCH/PUT /tags/1.json
def update
respond_to do |format|
if @tag.update(tag_params)
format.html { redirect_to tags_path, notice: 'Tag was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @tag.errors, status: :unprocessable_entity }
end
end
end
private
# Never trust parameters from the scary internet, only allow the white list through.
def tag_params
params[:tag]
end
答案 0 :(得分:1)
应该是:
def tag_params
params.require(:tag).permit(:name)
end
答案 1 :(得分:1)
params[:tag].require(:tag)
将在tag
哈希中需要一个参数params[:tag]
。你想要做的是params.require(:tag).permit(:name)
。