在form_for中找不到param

时间:2014-03-02 16:07:54

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

我已经使用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

2 个答案:

答案 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)