ActionController :: ParameterMissing(param丢失或值为空:film):

所以,当我试图访问我的应用程序上的电影页面时,我收到以下错误:

ActionController::ParameterMissing (param is missing or the value is empty: film): 2014-07-24T22:04:44.622356+00:00 app[web.1]: app/controllers/saas_admin/films_controller.rb:54:in `permitted_params' 

请参阅下面的电影控制器代码

films_controller.rb

 class SaasAdmin::FilmsController  :find_by_id!, :param => :studio_id, :class_name => Studio before_filter :set_sort_fields, :only => :edit before_filter :build_collections, :only => [:new, :create, :edit, :update] def create create! { parent_path(parent.id) } # Redirect to studio in case studio_id is changed end def update @film = Film.find_by_permalink(params[:id]) respond_to do |format| if @film.update(permitted_params) format.html { redirect_to saas_admin_studio_path(@film.studio), notice: 'Film was successfully updated.' } format.json { head :no_content } else format.html { render action: 'edit' } format.json { render json: @film.errors, status: :unprocessable_entity } end end end def index redirect_to parent_path(parent.id) end def show @clips = resource.clips.paginate(:page => params[:page], :per_page => 30, :order => 'clips.position') end protected def resource # @film ||= end_of_association_chain.find_by_permalink!(params[:id]) @film ||= end_of_association_chain.find_by_permalink!(params[:id]) end def collection @films ||= end_of_association_chain.paginate(:page => params[:page], :per_page => 30, :order => 'films.created_at') end def set_sort_fields resource.sort_name = '' if resource.name == resource.sort_name end def build_collections @studios ||= Studio.find(:all) end def permitted_params params.require(:film).permit(:name, :sort_name, :description, :short_description, :meta_data, :poster, :amazon_link, :active, :trackable, :country_ids => []) end end 

这可能是什么? 我一直试图弄清楚它,但也许一双新鲜的眼睛会发现它很简单。

干杯!

编辑

这是films / new.html.erb的视图代码

 

collection_path, :html => { :multipart => true } do |f| -%> "form", :locals => { :f => f } %> "saas_admin/shared/sidebar" %>

和电影/ edit.html.erb

 

saas_admin_studio_film_path(parent, resource), :html => { :multipart => true } do |f| -%> "form", :locals => { :f => f } %> "saas_admin/shared/sidebar" %>

编辑2

这里参考的是如何在工作时定义允许的参数:

  def permitted_params {:film => params.fetch(:film, {}).permit( :name, :sort_name, :description, :short_description, :meta_data, :poster, :amazon_link, :active, :trackable)} end 

发生这种情况是因为您已指定通过strong_params(在您的allowed_pa​​rams代码中指定)在参数中要求“电影”。

无论视图方面正在做什么(无论是链接还是forms/等),它都没有传递嵌套在“电影”下的参数

例如。)如果你要在控制器动作中raise params.inspect ,你会发现没有“电影”的节点。

最有可能的是,您在视图端具有的表单代码未设置为正确嵌套这些参数,例如,您使用的是form_tag吗?

当我使用Angular JS表单将数据发送到后端Rails 4时,我也遇到了这个问题。当我没有填充角度jsforms的任何内容时,错误将显示ActionController::ParameterMissing (param is missing or the value is empty:

我通过将params.fetch(:film, {})强参数添加到:

 params.fetch(:film, {}).permit(:name, :sort_name, :description, :short_description, :meta_data, :poster, :amazon_link, :active, :trackable, :country_ids => []) 

我引用代码示例来避免ActionController :: ParameterMissing(param丢失或值为空:film)

我希望这能帮到您。

为什么不这样使用:

 def creation_params params.permit(:film) end 

它为我工作! ;)