簡體   English   中英

Ruby on Rails 5 || 合並微博和博客||

[英]Ruby on Rails 5 || Merging microposts and blog ||

我所做的是在rails的博客文章教程中創建了microposts(管理),但是現在進行編輯,破壞和新工作。 顯示不

現在我收到以下錯誤

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>

管理控制器:

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>

你的問題在這里

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

您的@management結尾為零。 您正在將相同的ID傳遞給User和Managment查詢(順便說一句,它是拼寫管理)。

我認為您要嘗試的是從params[:id]獲取“ management”,然后從那里獲取關聯的用戶。 你可以這樣做:

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

注意我為find_by添加了一些錯誤處理,如果未找到該記錄,它將返回nil。 如果發生這種情況,您想將錯誤轉發到Rails的內置404頁面(用raise來完成)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM