2016-11-22 5 views
0

ネストされたリソースでカテゴリのサブカテゴリを作成しようとしています。私が持っている問題は、それが動作していないようです。私が得るのはundefined method sub_category_path for#<#:0x007f8fcde33550> どういう意味ですか? new_category_path swell asフォームの最初の値をnilにすることはできません。次のようにネストされたリソースレールの作成と編集5

私のコントローラメソッドは、次のとおりです。

サブカテゴリ更新:

@category = @subcategory.category.id 
if @subcategory.update(subcategory_params) 
    flash[:success] = "Subcat name updated" 
    redirect_to category_sub_category_path(@subcategory) 
else 
    render 'edit' 
end 

サブカテゴリ新しい:

@category = Category.find(params[:category_id]) # TODO:subcategory.category.id? 
@category_sub = @category.sub_categories.new 
#@subcategory = @category.sub_categories.new 

サブカテゴリが作成:

@subcategory = SubCategory.new(subcategory_params) 
if @subcategory.save 
    flash[:success] = "subcategory created" 
    redirect_to category_sub_category_path 
else 
    flash[:error] = "subcategory failed" 
    render 'new' 
end 

そして、私のプライベートを方法:私のSubCategory show.html.erb

<%@categories.each do |c|%> 
<ul class="listing"> 
    <div class="row"> 
     <div class="well col-md-4 col-md-offset-4"> 
      <li class="article-title"> 
       <strong><%= link_to "#{c.name}", category_path(c)%></strong> 
       <% c.sub_categories.each do |s|%> 
        <div> 
        <%=link_to s.name, category_sub_category_path(c,s)%> 
        </div> 
       <%end%> 
      </li> 
      <li><small> 
       <!--Pluralise here--> 
      </small></li> 
     </div> 
    </div> 
</ul> 
<%end%> 

そして:私は、サブカテゴリのインデックスを持っていない

private 

    def set_sub_category 
     @subcategory = SubCategory.find(params[:id]) 
    end 

    def subcategory_params 
     params.require(:sub_category).require(:name, :category_id) 
    end 
    end 

、サブカテゴリの視聴がここで見ることができCategories index.html.erb内のリンクをクリックするとオフに基づいています。

<span class ="badge"><%= link_to "Edit sub category name", 
         edit_category_sub_category_path([@category, @subcategory])%></span> 

そして、私のSubCategory edit.html.erb中:

<%=form_for([@category, @subcategory], :html => {class: "form-horizontal", role: "form"})do |f|%> 
     <div class="form-group"> 
      <div class="control-label col-sm-2"> 
       <%= f.label :subcategory%> 
      </div> 
      <div class="col-sm-8"> 
       <%= f.text_field :name, class: "form-control", placeholder: "Update Sub Category", autofocus: true%> 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-sm-offset-2 col-sm-10"> 
       <%=f.submit class: "btn btn-primary btn-lg"%> 
      </div> 
     </div> 
    <%end%> 

すべてのヘルプは

EDITいただければ幸いです。今、このエラー

を取得しています

エラーを

{"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"81lwz0NufTqdOni+4wPRO4Vnmeis9f32+sqSN‌​sxTXZY7ufyR8hTvF86KQ‌​wdMjcOP2DQJibK66croW‌​48Uhos9+A==", "sub_category"=>{"name"=>"Gold", "category_id"=>"1"}, "commit"=>"Update Sub category", "category_id"=>"1", "id"=>"1"}

引数の数が間違っ

def 
    subcategory_params params.require(:sub_category).require(:name, :category_id) 
end 
(2与えられたが、1を期待する)ので、

固定:私は、これはエラーの原因となっていnilをあなたはコメントで述べたように

+0

エラーのスタックトレースを表示できますか? –

+0

'@category、@ subcategory'の1つはnilと思われます。コントローラのサブカテゴリの編集アクションを投稿することができます。 –

+0

@BalaKarthik編集アクションはちょうどsubcategory = SubCategoryです。私はbefore_actionを持っているので、find(params [:id]):set_sub_category – Jack

答えて

2

editアクションが

def edit 
    @subcategory = SubCategory.find(params[:id]) 
end 

のようでなければならないので、値@categoryがあることを置く理由だけではなく、第二.require、ノーアイデアを出しましたfirst value of a form cannot be nil

あなたは、カテゴリとサブカテゴリの関係を持っていると仮定すると

def edit 
    @subcategory = SubCategory.find(params[:id]) 
    @category = @subcategory.category 
end 

として編集アクションを行います。

+0

分でそれをテストします、ありがとう – Jack

関連する問題