2016-11-22 94 views
0

试图在嵌套资源中创建子类别的子类别。我的问题是,它似乎没有工作。我得到的全部是undefined method sub_category_path'for#<#:0x007f8fcde33550> 您的意思是? new_category_path swell as表单的第一个值不能为空。问题创建和编辑嵌套资源rails 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 

而我的私人方法:

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一个链接,可以在这里看到:

<%@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%> 

然后在我的SubCategory show.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%> 

任何帮助,将不胜感激

编辑:

错误现在 正在此错误

{"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"}

由于参数错号(给定2预计1)

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

固定:刚拿出第二.require,不知道为什么我把有

+0

你可以显示堆栈跟踪错误? –

+0

看起来'@category,@ subcategory'之一是零。所以你可以发布控制器子类别的编辑动作。 –

+0

@BalaKarthik编辑动作只是子类别=子类别。find(params [:id]),因为我有一个before_action:set_sub_category – Jack

回答

2

正如你在评论中所提到的编辑动作一定要像

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

所以价值@category是零这就造成了一个错误first value of a form cannot be nil

使编辑行动

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

假设你有类别和子类别之间的关系。

+0

将在一分钟内测试它,谢谢 – Jack