ActionController:: ParameterMissing (параметр отсутствует или значение пустое: 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'
см. код контроллера my films ниже
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
что это может быть? Я пытался понять это некоторое время, но, возможно, свежий взгляд обнаружит, что это что-то довольно простое.
Ура!
редактировать
вот код вида для фильмы/новые.формат html.Эрб
<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 %>
и фильмов/редактирование.формат html.Эрб
<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
            3 ответов
это происходит потому, что вы указали, что требуется "пленка" в ваших параметрах через strong_params (указано выше в коде permitted_params).
независимо от того, что делает сторона вида (будь то ссылка или форма / и т. д.), его не передавая свои параметры, вложенные в "film"
например.) если бы вы были raise params.inspect в действии контроллера вы увидите, что нет узла для "пленки".
скорее всего, что неправильно, так это то, что код формы у вас есть сторона представления не настроена для правильного размещения этих параметров, вы используете form_tag например?
у меня тоже есть эта проблема, когда я использую угловую форму JS для отправки данных в backend Rails 4. Когда я ничего не заполнял в угловой форме 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 => [])
Я имею в виду пример кода, чтобы избежать ActionController:: ParameterMissing (param отсутствует или значение пустое: film)
Я надеюсь, что это поможет вам.
почему бы не использовать так:
def creation_params
params.permit(:film)
end
это работает для меня! ;)