2014-10-02 29 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'