use*_*101 12 ruby-on-rails ruby-on-rails-4
所以,当我试图访问我的应用程序上的电影页面时,我收到以下错误:
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'
Run Code Online (Sandbox Code Playgroud)
请参阅下面的电影控制器代码
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
Run Code Online (Sandbox Code Playgroud)
这可能是什么?我一直试图弄清楚它,但也许一双新鲜的眼睛会发现它很简单.
干杯!
编辑
这是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 %>
Run Code Online (Sandbox Code Playgroud)
和电影/ 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 %>
Run Code Online (Sandbox Code Playgroud)
编辑2
这里参考的是如何在工作时定义允许的参数:
def permitted_params
{:film => params.fetch(:film, {}).permit(
:name, :sort_name, :description, :short_description, :meta_data,
:poster, :amazon_link, :active, :trackable)}
end
Run Code Online (Sandbox Code Playgroud)
akb*_*bin 14
当我使用Angular JS表单将数据发送到后端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 => [])
Run Code Online (Sandbox Code Playgroud)
我引用代码示例来避免ActionController :: ParameterMissing(param丢失或值为空:film)
我希望这能帮到您.
发生这种情况是因为您已指定通过strong_params(在您的allowed_params代码中指定)在参数中要求"电影".
无论视图方面正在做什么(无论是链接还是形式/等),它都没有传递嵌套在"电影"下的参数
例如.)如果你raise params.inspect
在控制器动作中,你会看到没有"电影"的节点.
最有可能出现的问题是,您在视图侧的表单代码未设置为正确嵌套这些参数,form_tag
例如,您使用的是吗?
小智 7
为什么不这样使用:
def creation_params
params.permit(:film)
end
Run Code Online (Sandbox Code Playgroud)
它为我工作!;)
归档时间: |
|
查看次数: |
25620 次 |
最近记录: |