2017-01-18 93 views
0

我所做的是在rails的博客文章教程中創建微博(管理),但現在編輯,銷燬和新工作。顯示不Ruby on Rails 5 ||合併微博和博客||

現在,我發現了以下錯誤

NoMethodError in Managments#show 

undefined method `id' for nil:NilClass 

<li id="@managment-<%= @managment.id %>" > <- cause of the problem 
    <%= link_to gravatar_for(@managment.user, size: 50), @managment.user %> 
    <div class="user"><%= link_to @managment.user.name, @managment.user %></div> 

    <ul class="nav nav-tabs"> 
    <li class="active"><a data-toggle="tab" onclick="calculateManagement()" href="#home">@managment</a></li> 

managments控制器:

class ManagmentsController < ApplicationController 
    before_action :logged_in_user, only: [:create, :destroy] 
    before_action :correct_user, only: :destroy 

    def index 
    @managments = current_user.managments 
    end 

    def show 
    @user = User.find(params[:id]) 
    @managment = current_user.managments.find_by_id(params[:id]) 

    end 

    def new 
    @user = User.new 
    @managment = Managment.new 
    end 

    def edit 
    @managment = Managment.find(params[:id]) 
    end 

    def create 
    @managment = current_user.managments.build(managment_params) 
    if @managment.save 
     flash[:success] = "Managment created!" 
     redirect_to @managment 
    else 
     @feed_items = current_user.feed.paginate(page: params[:page]) 
     render 'new' 
    end 
    end 

    def update 
    @managment = Managment.find(params[:id]) 

    if @managment.update(article_params) 
     redirect_to @managment 
    else 
     render 'edit' 
    end 
    end 

    def destroy 
    @managment.destroy 
    flash[:success] = "Managment deleted" 
    redirect_to managments_path 
    end 


    private 

    def managment_params 
     params.require(:managment).permit( 
     :title, :budget, 
     :procent1, :procent2, :procent3, :procent4, 
     :procent5, :procent6, :procent7, 
     :procent8, :procent9, :procent10, 
     :procent11, :procent12, :result1, 
     :result2, :result3, :objectivesname1, 
     :objectivesname2, :objectivesname3, 
     :lowprocent1, :lowprocent2, :lowprocent3, 
     :medprocent1, :medprocent2, :medprocent3, 
     :highprocent1, :highprocent2, :highprocent3, 
     :lowobjectives1, :lowobjectives2, :lowobjectives3, 
     :medobjectives1, :medobjectives2, :medobjectives3, 
     :highobjectives1, :highobjectives2, :highobjectives3 

    ) 
    end 

    def correct_user 
     @managment = current_user.managments.find_by(id: params[:id]) 
     redirect_to managments_path if @managment.nil? 
    end 

end 

show.html.erb

<li id="@managment-<%= @managment.id %>" > 
    <%= link_to gravatar_for(@managment.user, size: 50), @managment.user %> 
    <div class="user"><%= link_to @managment.user.name, @managment.user %></div> 

    <ul class="nav nav-tabs"> 
    <li class="active"><a data-toggle="tab" onclick="calculateManagement()" href="#home">@managment</a></li> 
    <li><a data-toggle="tab" href="#menu1" onclick="calculateManagement()">Data</a></li> 
    <li><a data-toggle="tab" href="#menu2" onclick="calculateManagement()">Desired return sheet</a></li> 
    <li><a data-toggle="tab" href="#menu3" onclick="calculateManagement()">Expected return sheet</a></li> 
    <li><a data-toggle="tab" href="#menu4" onclick="calculateManagement()">Cost sheet</a></li> 
    </ul> 

    <div class="tab-content"> 
    <div id="home" class="tab-pane fade in active"> 
     <h3>@managment</h3> 
     <div class="field" id="totalbudget"> 
      <input class="inputbudget procentages" id="budget" onkeydown="return false" value="<%= @managment.title %>"> 
     <div class="colum"> 
    <h1>Budget</h1> 
    <input class="inputbudget procentages" id="budget" onkeydown="return false" value="<%= @managment.budget %>"> 
    </div> 

    <div class="colum"> 
    <h4>low presence</h4> 

    <p>precentages</p> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.procent1 %>">% 
    <p>result</p> 
    <input class="inputbudget" id="result1" onkeydown="return false" value="<%= @managment.result1 %>"> 
    </div> 

    <div class="colum"> 
    <h4>Medium presence</h4> 
    <p>precentages</p> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.procent2 %>">% 
    <p>result</p> 
    <input class="inputbudget" id="result2" onkeydown="return false" value="<%= @managment.result2 %>"> 
    </div> 

    <div class="colum"> 
    <h4>High presence</h4> 
    <p>precentages</p> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.procent3 %>">% 
    <p>result</p> 
    <input class="inputbudget" id="result3" onkeydown="return false" value="<%= @managment.result3 %>"> 
    </div> 
    </div> 

     <span id="title"> 
    <h1>Weighings</h1> 
    </span> 
    <div class="field" id="weighings"> 
    <div class="colum"> 
    <h4>Low presence</h4> 
    <input class="inputbudget procentages" id="lowplow" onkeydown="return false" value="<%= @managment.procent4 %>">% 
    <input class="inputbudget procentages" id="lowpmed" onkeydown="return false" value="<%= @managment.procent5 %>">% 
    <input class="inputbudget procentages" id="lowphigh" onkeydown="return false" value="<%= @managment.procent6 %>">% 
    </div> 

    <div class="colum"> 
    <h4>Medium presence</h4> 
    <input class="inputbudget procentages" id="medplow" onkeydown="return false" value="<%= @managment.procent7 %>">% 
    <input class="inputbudget procentages" id="medpmed" onkeydown="return false" value="<%= @managment.procent8 %>">% 
    <input class="inputbudget procentages" id="medphigh" onkeydown="return false" value="<%= @managment.procent9 %>">% 
    </div> 

    <div class="colum"> 
    <h4>High presence</h4> 
    <input class="inputbudget procentages" id="highplow" onkeydown="return false" value="<%= @managment.procent10 %>">% 
    <input class="inputbudget procentages" id="highpmed" onkeydown="return false" value="<%= @managment.procent11 %>">% 
    <input class="inputbudget procentages" id="highphigh" onkeydown="return false" value="<%= @managment.procent12 %>">% 
    </div> 
    </div> 

    <div class="field"> 
     <h1>Objectives</h1> 

    <h4>low presence</h4> 
    <input class="inputbudget procentages" id="objectiveinput" onkeydown="return false" value="<%= @managment.objectivesname1 %>"> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowprocent1 %>">% 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medprocent1 %>">% 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highprocent1 %>">% 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowobjectives1 %>"> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medobjectives1 %>"> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highobjectives1 %>"> 

    <h4>Medium presence</h4> 
    <input class="inputbudget procentages" id="objectiveinput" onkeydown="return false" value="<%= @managment.objectivesname2 %>"> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowprocent2 %>">% 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medprocent2 %>">% 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highprocent2 %>">% 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowobjectives2 %>"> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medobjectives2 %>"> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highobjectives2 %>"> 

    <h4>High presence</h4> 
    <input class="inputbudget procentages" id="objectiveinput" onkeydown="return false" value="<%= @managment.objectivesname3 %>"> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowprocent3 %>">% 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medprocent3 %>">% 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highprocent3 %>">% 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.lowobjectives3 %>"> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.medobjectives3 %>"> 
    <input class="inputbudget procentages" id="procentages" onkeydown="return false" value="<%= @managment.highobjectives3 %>"> 

    </div> 
    </div> 
    <div id="menu1" class="tab-pane fade"> 
     <h3>Data</h3> 
      <!--START BUDGET FORM --> 
     <form class="budgetresultsoutput" id="totalbudget"> 
     <!--End budget output--> 

     <!--Procentages output--> 
     <div class="row datarowbudget"> 
      <div class="colum" id="columtext"> 
      <p>P.O.I</p> 
      <input class="box names" type="text" id="title3-0" value="Domestic" onkeydown="return false" placeholder="Slice #1 title" /> 
      <input class="box names" type="text" id="title2-1" value="Continental" onkeydown="return false" placeholder="Slice #1 title" /> 
      <input class="box names" type="text" id="title2-2" value="International" onkeydown="return false" placeholder="Slice #1 title" /> 
      <input class="box" type="text" id="title2-2" value="Total" onkeydown="return false" placeholder="Slice #1 title" /> 
      </div> 

      <!-- COLUM 1/LOW--> 
      <div class="colum" id="regio"> 
      <p>Low</p> 
      <input class="box" value="1" id="value3-0" type="text" onkeydown="return false" /> 
      <input class="box" value="1" id="value3-1" type="text" onkeydown="return false" /> 
      <input class="box" value="1" id="value3-2" type="text" onkeydown="return false" /> 
      <input class="box" value="1" id="value3-9" type="text" onkeydown="return false" /> 
      </div> 
      <!-- COLUM 2 MEDIUM --> 
      <div class="colum" id="regio"> 
      <p>Medium</p> 
      <input class="box" value="1" id="value3-3" type="text" onkeydown="return false" /> 
      <input class="box" value="1" id="value3-4" type="text" onkeydown="return false" /> 
      <input class="box" value="1" id="value3-5" type="text" onkeydown="return false" /> 
      <input class="box" value="1" id="value3-10" type="text" onkeydown="return false" /> 
      </div> 
      <!-- COLUM 3 HIGH --> 
      <div class="colum" id="regio"> 
      <p>High</p> 
      <input class="box" value="1" id="value3-6" type="text" onkeydown="return false" /> 
      <input class="box" value="1" id="value3-7" type="text" onkeydown="return false" /> 
      <input class="box" value="1" id="value3-8" type="text" onkeydown="return false" /> 
      <input class="box" value="1" id="value3-11" type="text" onkeydown="return false" /> 
      </div> 
      <!--Budget output--> 
      <div class="colum columbudget" id="regio"> 
      <p>Budget</p> 
      <input id="budgetdata" type="text" name="budget" value="<%= @managment.budget %>" onkeydown="return false"><br> 
      </div> 
      <div class="colum" id="regioprec"> 
      <!--Low presence:--> 
      <p>Procentages</p> 
      <input class="procentages" id="lowdata" type="text" name="low" value="<%= @managment.procent1 %>" onkeydown="return false">%<br> 
      <input class="procentages"id="meddata" type="text" name="low" value="<%= @managment.procent2 %>" onkeydown="return false">%<br> 
      <input class="procentages" id="highdata" type="text" name="low" value="<%= @managment.procent3 %>" onkeydown="return false">%<br> 
      </div> 
     </div> 
     <!--End procentages input--> 
    </div> 
    <div id="menu2" class="tab-pane fade"> 
     <h3>Desired return sheet</h3> 
     <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam.</p> 
    </div> 
    <div id="menu3" class="tab-pane fade"> 
     <h3>Expected return sheet</h3> 
     <p>Eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p> 
    </div> 
     <div id="menu4" class="tab-pane fade"> 
     <h3>Cost sheet</h3> 
     <p>Eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p> 
    </div> 
    </div> 



    <span class="timestamp"> 

    <% if current_user?(@managment.user) %> 
     <%= link_to "delete", @managment, method: :delete, 
             data: { confirm: "You sure?" } %> 
    <% end %> 
    </span> 
</li> 



<%= link_to 'Edit', edit_managment_path(@@managment) %> | 
<%= link_to 'Back', managments_path %> 



<script type="text/javascript"> 
//CALCULATE MANAGEMENT 
function calculateManagement() { 

    //START OF BUDGET(data) PART 
    var domesticResultLow = document.getElementById('value3-0'); 
    var domesticResultMed = document.getElementById('value3-1'); 
    var domesticResultHigh = document.getElementById('value3-2'); 
    var domesticResultFinal = document.getElementById('value3-9'); 

    var continentalResultLow = document.getElementById('value3-3'); 
    var continentalResultMed = document.getElementById('value3-4'); 
    var continentalResultHigh = document.getElementById('value3-5'); 
    var continentalResultFinal = document.getElementById('value3-10'); 

    var globalResultLow = document.getElementById('value3-6'); 
    var globalResultMed = document.getElementById('value3-7'); 
    var globalResultHigh = document.getElementById('value3-8'); 
    var globalResultFinal = document.getElementById('value3-11'); 

    var lowProcentageLow = document.getElementById('lowplow').value; 
    var lowProcentageMed = document.getElementById('lowpmed').value; 
    var lowProcentageHigh = document.getElementById('lowphigh').value; 

    var medProcentageLow = document.getElementById('medplow').value; 
    var medProcentageMed = document.getElementById('medpmed').value; 
    var medProcentageHigh = document.getElementById('medphigh').value; 

    var highProcentageLow = document.getElementById('highplow').value; 
    var highProcentageMed = document.getElementById('highpmed').value; 
    var highProcentageHigh = document.getElementById('highphigh').value; 

    var resultOne = document.getElementById('result1').value; 
    var resultTwo = document.getElementById('result2').value; 
    var resultThree = document.getElementById('result3').value; 

    var lowProcentLow = (resultOne /100)* lowProcentageLow; 
    domesticResultLow.value = lowProcentLow; 

    var lowProcentMed = (resultOne /100)* lowProcentageMed; 
    domesticResultMed.value = lowProcentMed; 

    var lowProcentHigh = (resultOne /100)* lowProcentageHigh; 
    domesticResultHigh.value = lowProcentHigh; 


    var medProcentLow = (resultTwo /100)* medProcentageLow; 
    continentalResultLow.value = medProcentLow; 

    var medProcentMed = (resultTwo /100)* medProcentageMed; 
    continentalResultMed.value = medProcentMed; 

    var medProcentHigh = (resultTwo /100)* medProcentageHigh; 
    continentalResultHigh.value = medProcentHigh; 


    var highProcentLow = (resultThree /100)* highProcentageLow; 
    globalResultLow.value = highProcentLow; 

    var highProcentMed = (resultThree /100)* highProcentageMed; 
    globalResultMed.value = highProcentMed; 

    var highProcentHigh = (resultThree /100)* highProcentageHigh; 
    globalResultHigh.value = highProcentHigh; 

    domesticResultFinal.value = resultOne; 
    continentalResultFinal.value = resultTwo; 
    globalResultFinal.value = resultThree; 

    //END OF BUDGET(data) PART 

} 


//No letters 
function isNumber(evt) { 
    evt = (evt) ? evt : window.event; 
    var charCode = (evt.which) ? evt.which : evt.keyCode; 
    if (charCode > 31 && (charCode < 48 || charCode > 57)) { 
    return false; 
    } 
    return true; 
} 
// 
</script> 

回答

1

你的問題是在這裏

@user = User.find(params[:id]) 
@managment = current_user.managments.find_by_id(params[:id]) 

您的@management結束爲零。您正在將相同的ID傳遞給用戶和管理查詢(順便說明,它是拼寫管理)。

我想你要做的是從params[:id]獲得'管理',然後從那裏獲取關聯的用戶。你可以這樣做:

@managment = Managment.find_by(id: params[:id]) 
if [email protected] 
    raise ActionController::RoutingError.new('Not Found') 
end 
@user = @managment.user 

注意我已經添加了一些錯誤處理find_by,這將返回nil如果記錄沒有找到。如果發生這種情況,您希望將錯誤轉發到Rails的內置404頁面(使用raise完成)。

+0

謝謝您的回答對你管理的修正, 我得到現在一個新的錯誤消息:# 未定義的局部變量或方法'同治」 <#<類別:0x007f50f02d0030>:0x007f50dc799210> 難道你意思是? @managment 感謝您的耐心 – Salman

+0

@Notorious_Creed如果回答了你的問題,你應該接受的答案:) –

+0

@PamioSolanky我按下很快進入並公佈未完成的響應:P – Salman