【问题标题】:ActionController::ParameterMissing (param is missing or the value is empty: film):ActionController::ParameterMissing(参数丢失或值为空:电影):
【发布时间】:2014-07-24 22:10:26
【问题描述】:

因此,我在尝试访问我的应用上的电影页面时遇到以下错误:

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 < SaasAdminController
  inherit_resources
  belongs_to :studio, :finder => :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的视图代码

<h1><%= @page_title = "New #{resource_class}" %></h1>

<%= form_for resource, :url => collection_path, :html => { :multipart => true } do |f| -%>
  <%= render :partial => "form", :locals => { :f => f } %>
<% end -%>

<% content_for :sidebar do %>
  <%= render :partial => "saas_admin/shared/sidebar" %>
<% end %>

和电影/edit.html.erb

<h1><%= @page_title = "Edit #{resource_class}" %></h1>

<%= form_for resource, :url => saas_admin_studio_film_path(parent, resource), :html => { :multipart => true } do |f| -%>
  <%= render :partial => "form", :locals => { :f => f } %>
<% end -%>

<% content_for :sidebar do %>
  <%= render :partial => "saas_admin/shared/sidebar" %>
<% end %>

编辑 2

以下是允许的参数在工作时是如何定义的供参考:

 def permitted_params

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

end

【问题讨论】:

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


【解决方案1】:

当我使用Angular JS表单向后端Rails 4发送数据时,我也遇到了这个问题。当我没有在Angular js表单中填写任何内容时,错误将显示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 => [])

我指的是code example to avoid ActionController::ParameterMissing (param is missing or the value is empty: film)

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    为什么不这样使用:

    def creation_params
    params.permit(:film)
    end
    

    它对我有用! ;)

    【讨论】:

      【解决方案3】:

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

      无论视图端在做什么(无论是链接还是表单等),它都不会传递嵌套在“电影”下的参数

      例如)如果您在控制器操作中使用raise params.inspect,您会看到“电影”没有节点。

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

      【讨论】:

      • 感谢@derekyau,我已经用视图代码更新了原始帖子 - 希望它有助于调试。
      • 更新,我还添加了在工作时与现在相比如何定义 allowed_pa​​rams。
      • 抱歉,您要再次执行哪个操作?更新/创建?
      • 我正在尝试制作一部新影片,因此未加载的是新页面。这将是新的行动。
      • 因为 'new' 动作实际上并没有使用 strong_params 来做任何事情,我看不出它是如何引起问题的......也许它更像是更新/创建动作失败并试图重新渲染新的?正如您所说,您正在尝试“创作”一部新电影,因此它很可能是实际受到打击的“创作”动作。在创建操作中,您可以尝试raise params.inspect 并粘贴输出吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 2021-11-20
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      相关资源
      最近更新 更多