【问题标题】:Rails: param is missing or the value is empty. strong parameters in controllerRails:参数丢失或值为空。控制器中的强参数
【发布时间】:2014-10-02 10:29:59
【问题描述】:

我有这个控制器

class StoresController < ApplicationController
  before_filter :authenticate_business!, :except => [:index, :show]

def index
  #@stores = Store.paginate(:page => params[:page])#, :per_page => 8)

  if params[:query].present?
    @stores = Store.search(params[:query], page: params[:page])
  else
    @stores = Store.all.page params[:page]
  end
end

def show
  @store = Store.friendly.find(params[:id])

  if request.path != store_path(@store)
    redirect_to @store, status: :moved_permanently
  end
end

def new
  @store = Store.new
end

def create
  @store = Store.new(store_params)

  @store.business_id = current_business.id

  if @store.save
    redirect_to @store
  else
    render 'new'
  end
end

def edit
  @store = Store.friendly.find(params[:id])
end

def update
  @store = Store.friendly.find(params[:id])

  if @store.update(store_params)
    redirect_to @store
  else
    render 'edit'
  end
end

def destroy
  @store = Store.friendly.find(params[:id])

  @store.destroy

  redirect_to stores_url
end


private
  def store_params
    params.require(:store).permit(:name, :description, :address, :telephone, :email, :website)
  end

end

和一个带有表单的视图来创建一个新的商店。

<%= form_for @store do |f| %>

.......
code
......

<% end %>

问题是,当我提交表单时,它给了我这个错误“参数丢失或值为空:存储”,指向行“params.require(:store).permit(:name,:description , :address, :telephone, :email, :website)"

有解决这个问题的办法吗? 谢谢。

【问题讨论】:

  • 您可以在提交表单时显示浏览器的响应标头吗?表单中的字段是否也与控制器中的参数相关?
  • 是的,表单中的字段与'store_params'函数相同。请求参数 {"utf8"=>"✓", "authenticity_token"=>"vdBK16ZwnqAPWtqTOlNjA5lBIHnW9Vb5WkpbOYhoCrQ=", "commit"=>"添加存储", "action"=>"create", "controller"=>"stores"}
  • 在您发布的内容下方,在您的浏览器中,您应该查看您提交的内容是否有任何值,它在表单数据下,应该如下所示:名称:xxxxxxx,描述:xxxxxx,还要确保所有此位中的字段对应于您允许的参数
  • 这是表格:
    etc etc 中没有表单数据better_error 页面
  • 似乎在 new.html.erb 中修复了这个合并部分 _form.html.erb

标签: ruby-on-rails controller strong-parameters


【解决方案1】:

我遇到了同样的问题,它是由路线问题引起的,如 cmets 中所述,导致表单无法发布任何数据。

我认为您需要确保对“新”路由的“获取”请求访问您的“新”方法,而对“新”路由的“发布”请求访问您的“创建”方法。比如:

get   'stores/new'  => 'stores#new'
post  'stores/new'  => 'stores#create'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多