2014-10-02 26 views
0

强参数我有此控制器Rails:param丢失或值为空。在控制器

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(:店).permit(:名称,描述,地址,电话,电子邮件,网站)“

任何想法来解决这个问题? 谢谢。

+0

您可以在提交表单时显示来自浏览器的响应标题吗?此外,你的表单中的字段与控制器中的参数相关吗? – Jax 2014-10-02 11:14:25

+0

是的,表单中的字段与'store_params'函数相同。 请求参数\t { “UTF8”=> “✓”, “authenticity_token”=> “vdBK16ZwnqAPWtqTOlNjA5lBIHnW9Vb5WkpbOYhoCrQ =”, “提交”=> “添加存储”, “行动”=> “创建”, “控制器”=> “stores”} – 2014-10-02 11:23:02

+0

在您发布的内容之下,您应该看看您提交的内容是否具有任何值,它位于表单数据下,应该如下所示:name:xxxxxxx,description:xxxxxx,还要确保所有字段这个位对应于你允许的参数 – Jax 2014-10-02 11:28:09

回答

0

我有这个相同的问题,它是由路径问题引起的,如评论中所讨论的,导致表单不发布任何数据。

我认为你需要的是确保向'新'路线的'获取'请求访问'新'路线,同时'请求'新'路线'的请求访问你的'创建'方法。例如:

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